2017-02-07 5 views
0

Моего запроса просто, но содержит много данных:MySQL занимает слишком много времени, чтобы выполнить

SELECT * 
FROM trackhistory 
WHERE key=14846 and 
    date between "2016-11-15 00:00:00" and "2016-12-16 13:47:02" 

У меня есть более чем 10 миллионов строк в этой таблице.

Моя структура таблицы:

enter image description here

Пожалуйста, помогите мне, чтобы оптимизировать его. Это займет более двух минут для исполнения.

Я использовал объяснение для запроса, но не получил никакой подсказки. enter image description here

+5

Любые индексы определены? Если нет, добавьте один для ключа и один для даты –

+0

Возможные ключи, являющиеся нулевыми, должны дать вам ключ ... – Shadow

ответ

1

Комбинированный INDEX(key, date) будет лучше, чем отдельные индексы.

my index cookbook

0

Сначала добавьте индекс Key и узнайте, что произойдет. Синтаксис somehting так:

ALTER TABLE `trackhistory` ADD INDEX (`product_id`) 

Затем можно добавить ключ к Date, но это будет добавить некоторые дополнительные усилия с вставкой и займет немного места. Это будет зависеть от ваших обычаев, и невозможно сказать, если это разумная вещь.

Лучше всего попробовать свои дела.

(и для моего здравомыслия, если у вас есть верблюжьей случай в вашей базе данных, то почему бы не показать тех, кто в запросе хорошо. Это просто выглядит неприглядное, имея Date поле и с date в запросе. Я знаю, что это работает, но ....)

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