MySql, кто-нибудь может подсказать, как улучшить мой запрос / индекс? - PullRequest
0 голосов
/ 19 января 2011

Может кто-нибудь подсказать, как я могу улучшить свой запрос, его использование для карты сайта и 80000 страниц, отсюда и ограничение.

Вот мой запрос

SELECT PageName
FROM pads
WHERE RemoveMeDate = '2001-01-01 00:00:00'
ORDER BY PadID DESC
LIMIT 20000 , 30000

Вот мое ОБЪЯСНЕНИЕ

alt text

Вот индексы, которые у меня уже есть

alt text

Ответы [ 3 ]

2 голосов
/ 19 января 2011

Оптимальным индексом для этого запроса может быть комбинированный индекс по столбцам RemoveMeDate, PadID и PageName.

0 голосов
/ 19 января 2011

Попробуйте , а не , используя любые индексы. Сколько всего строк в таблице?

Я заметил, что вы ищете 10 тыс. Строк из примерно 48 тыс. Строк, совпадающих только с RemoveMeDate - таблица должна быть большой или вы должны выбирать большую часть таблицы.

SELECT PageName
FROM pads USE INDEX()
WHERE RemoveMeDate = '2001-01-01 00:00:00'
ORDER BY PadID DESC
LIMIT 20000 , 30000

Отсутствие каких-либо индексов вынуждает его просто сканировать таблицу. Теперь, если это не помогает и медленнее, попробуйте создать определенный индекс, который упорядочивает DESC, например попробуйте один из двух ниже

CREATE INDEX IX_pads_rmd_iddesc ON pads (RemoveMeDate, PadID DESC, PageName)
CREATE INDEX IX_pads_rmd_iddesc ON pads (RemoveMeDate, PadID DESC)

В сочетании с FORCE INDEX, если он не выбран автоматически

SELECT PageName
FROM pads USE INDEX(IX_pads_rmd_iddesc)
WHERE RemoveMeDate = '2001-01-01 00:00:00'
ORDER BY PadID DESC
LIMIT 20000 , 30000

Обратите внимание, что хотя индексы и создают "PadID DESC", MySQL игнорирует их. Можно надеяться, что однажды, когда он будет реализован, он встанет на свои места.

Спецификация index_col_name может заканчивается ASC или DESC. Эти ключевые слова разрешены для будущих расширений для указания возрастания или убывания хранение значений индекса. В настоящее время они анализируются, но игнорируются; значения индекса всегда хранятся в порядке возрастания.

0 голосов
/ 19 января 2011

вам следует заглянуть в «индекс силы» или «использовать индекс», если правильные индексы не выбираются автоматически.

http://dev.mysql.com/doc/refman/5.1/en/index-hints.html

...