Dennis P. Nikolaenko wrote:
By the way, reading rcube_sess_gc() I found an improvement possibility. Function could be simpler and speed increased if we'll create index on cache.session_id column with "ON DELETE CASCADE" reference, but it needs innodb in mysql (foreign keys not supported by myisam tables), and triggers in sqlite (foreign keys not supported at all).
Another solution would be to get rid of the initial SELECT query and IN (... ) clauses and do one DELETE query with a JOIN between "session" and "cache" and second DELETE just for session. Both DELETEs would just have a now()-changed > $maxlifetime WHERE clause. now() is constant, so it may be better to write expression like now()-$maxlifetime > changed. If there is an index on changed column, the search would be very quick. This approach has a potential of non atomic commit if cache entry is created between the two DELETEs. So it should be wrapped into a transaction.
So, adding cache.session_id and session.changed indexes will be a good improvement for now.