Я провожу несколько тестов с действительно простой таблицей InnoDB (с именем Test) со следующей структурой:
Id int(10) unsigned NOT NULL AUTO_INCREMENT
UserId int(10) NOT NULL
Body varchar(512) COLLATE utf8_unicode_ci NOT NULL
CreatedAt datetime NOT NULL
один дополнительный индекс по UserId:
KEY Idx_Test_UserId (UserId) USING BTREE
Когда я пытаюсь выполнить этот запрос ...
INSERT INTO Comments (UserId,Body,CreatedAt) VALUES (1,'This is a test',NOW())
... иногда я завершаю операцию за несколько миллисекунд, но иногда это занимает около секунды.
У меня такая же проблема с простым оператором SELECT:
SELECT Body FROM Comments WHERE UserId=1
Я единственный, кто проводит тесты на этой конкретной таблице, я действительно не понимаю, что у меня такая разница во времени выполнения.
Последнее замечание: когда я делаю те же тесты с таблицей MyISAM, у меня нет никаких проблем.
Для InnoDB переменная «auto_increment» должна быть в индексе (первой или единственной), чтобы избежать некоторых проблем с блокировкой. Насколько я понимаю, с MyISAM этого не происходит.
Кстати, а почему «Id» не является первичным ключом? Не то чтобы это необходимо, но просто "похоже" так, как должно быть для этой таблицы.