Ich erhalte diese Meldungen etwa 5 Mal pro Stunde in meinen langsamen Abfrageprotokollen:
# Query_time: 11.420629 Lock_time: 0.000033 Rows_sent: 0 Rows_examined: 0
SET timestamp=1267487708;
INSERT INTO record_lock (record_lock.module_id, record_lock.module_record_id, record_lock.site_id, record_lock.user_id, record_lock.expiration_date_time, record_lock.date_time_created) VALUES ('40', '12581', '940', '155254', '2010-03-02 00:24:57', '2010-03-01 23:54:57');
# Query_time: 2.095374 Lock_time: 0.000031 Rows_sent: 0 Rows_examined: 0
SET timestamp=1267488361;
DELETE
FROM record_lock
WHERE record_lock.user_id = 221659 AND record_lock.expiration_date_time IS NOT NULL;
Die Tabelle record_lock verwendet derzeit InnoDB und hat im Moment weniger als ein Dutzend Datensätze in ihr.
Wir haben mehrere tausend aktive Benutzer in unserem System. Jedes Mal, wenn sie einen Datensatz bearbeiten, fügen wir etwas in diese Tabelle ein. Und bei jedem Laden einer beliebigen Seite im System führen wir 1) SELECT aus der Tabelle durch, um zu sehen, ob es Sperren für den aktuellen Benutzer gibt, und 2) eine DELETE-Abfrage für diese Tabelle aus, wenn es Datensätze für den Benutzer gibt, wobei die Primärschlüssel der Tabelle in der WHERE-Klausel referenziert werden.
Hier ist das Schema der Tabelle:
CREATE TABLE IF NOT EXISTS `record_lock` (
`module_id` int(10) unsigned NOT NULL,
`module_record_id` int(10) unsigned NOT NULL,
`site_id` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned NOT NULL,
`expiration_date_time` datetime NOT NULL,
`date_time_created` datetime DEFAULT NULL,
PRIMARY KEY (`module_id`,`module_record_id`),
KEY `record_lock_site_id` (`site_id`),
KEY `index_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;