Назад | Перейти на главную страницу

Непостоянная производительность InnoDB

Я провожу несколько тестов с действительно простой таблицей 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» не является первичным ключом? Не то чтобы это необходимо, но просто "похоже" так, как должно быть для этой таблицы.