У меня есть несколько таблиц с ~ 15 миллионами строк.Когда я создаю idex для столбца id, а затем выполняю простой запрос, такой как SELECT * FROM my_table WHERE id = 1
, я получаю данные в течение одной секунды.Но затем, через несколько минут, если я выполню запрос с другим идентификатором, это займет более 15 секунд.
Я уверен, что это не кэш запроса, потому что я все время пытаюсь использовать разные идентификаторы, чтобыубедитесь, что я не получаю из кеша.Кроме того, я использовал EXPLAIN
, чтобы убедиться, что индекс используется.
Спецификации сервера:
CPU: Intel Dual Xeon 5405 Harpertown 2.0Ghz Quad Core
RAM: 8GB
Hard drive 2: 146GB SAS (15k rpm)
Еще одна вещь, которую я заметил, это то, что, если я выполню REPAIR TABLE my_table
запросы снова становятся в течение одной секунды.Я предполагаю, что что-то кэшируется, либо таблица, либо индекс.Если это так, есть ли способ сказать MySQL, чтобы держать его в кэше.С учетом спецификаций сервера это нормально, что на индексированную таблицу уходит около 13 секунд?Индекс не является уникальным, и каждый запрос возвращает около 3000 строк.
ПРИМЕЧАНИЕ. Я использую MyISAM и знаю, что в этих таблицах не будет записей, все запросы будут считывать данные.
решено: спасибо за ваши ответы, так как многие из вас указали, что это был key_buffer_size
. Я также переупорядочил таблицы, используя тот же столбец, что и индекс, чтобы записи не рассеялись, теперь я выполняюзапросы последовательно менее 1 секунды.