2015-06-24 2 views
-1

У меня есть большой стол с более чем 10 миллионами записей, я изменил двигатель от InnoDB до MyISAM, после чего у меня улучшилась производительность на count, но ниже запрос займет около 3 - 4 секунды для запуска:mysql медленный фильтр даты на большом столе

простой подсчет:

select count(`id`) from sample_table ; 

занимает около 2 секунд Mili

SELECT count(`id`) from sample_table where created_at > '2015-06-24 19:26:08'; 

занимает около 3 - 4 секунды

Я добавил индекс для поля created_at, но это не помогает повысить производительность.

Моя цель - запустить его максимум 1 секунду! пожалуйста, помогите мне сделать это возможным.

+1

Используйте 'EXPLAIN', чтобы узнать, что именно делает MySQL. – CBroe

+0

Попробуйте использовать TIMESTAMP ('2015-06-24 19:26:08'), и если это не поможет, создайте created_at отметку времени (с индексом). – Mike

+0

@Mike после использования временной отметки времени увеличено с 2,8 с до 2,4 сек, но доза не соответствует моей цели. – mehdi

ответ

2

Это слишком длинный комментарий. Вот несколько вещей, которые нужно попробовать.

I MySQL собирается сканировать индекс, чтобы подсчитывать записи, а не просто использовать метаданные индекса для получения итоговых записей. Итак, 3-4 секунды для сканирования индекса на 10 миллионов записей не , что длинный.

Хотя это не должно иметь значение, возможно, count(*) оптимизировали бы лучше:

SELECT count(*) 
from sample_table 
where created_at > '2015-06-24 19:26:08'; 

Также стоит попробовать >= просто чтобы увидеть, если есть разница.

+0

Спасибо, гордон, но> = доза не помогает и не подсчитывает (*) – mehdi

+0

Это расстраивает, потому что я считаю, что индекс имеет (или может иметь хотя бы) правильную информацию в своей иерархии (ребенок рассчитывает). Однако запрос, похоже, не использует информацию. Прямо сейчас, я не могу придумать способ избежать сканирования индекса. –

+0

Прошу прощения, что вы правы, чтобы изменить счетчик ('id'), чтобы подсчитать (*), запустив его в 0,24 секунды, и я получил результат желания. Благодарю. но не могли бы вы объяснить, почему смена счетчика (*) делает его быстрее? – mehdi

Смежные вопросы