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

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

На самом деле я выполняю два очень похожих запроса: один для подсчета и один для получения записей с ограничением

SELECT count(Pads.PadID) AS CountOfPadID FROM Pads WHERE ((RemoveMeDate=
'2001-01-01 00:00:00') AND (catid between 0 and 11)) 
ORDER BY VersionAddDate DESC;

SELECT PadID, CatID, IconSoureURL, OsStr, ProgramName, PageName, ProgramVersion, 
left(English450,650) as English450, English45, ProgHomeURL, DownloadURL, License,
ReleaseStatus FROM Pads WHERE RemoveMeDate='2001-01-01 00:00:00' AND catid 
between 0 and 11 ORDER BY VersionAddDate DESC LIMIT 0,20;

Да, диапазон может меняться, это может быть от 100 до 111

Мой первый запрос занимает 0,6 секунды, и, как ни странно, второй запрос довольно быстрый, даже с SQL_NO_CACHE.

Вот объяснение результатов первого запроса. enter image description here

Вот мои текущие индексы enter image description here

1 Ответ

0 голосов
/ 08 марта 2011

Оба ваших запроса возвращают одни и те же данные, могут быть разные порядки.Но они касаются одних и тех же данных на диске / табличном пространстве / могут иметь одинаковые индексы (не могли бы вы указать объяснение для запроса 2).Первый запрос фактически согревает кеш для вас, он получает данные в памяти, поэтому второй запрос выполняется быстро.

Можем ли мы сделать это быстрее? Возможно, она уже очень быстрая, она просматривает только 3 записи, поэтому индекс идеален.Первый запрос может быть сделан на холодных кешах / буферных пулах.В следующий раз, выполняя бенчмаркинг, сначала прогрейте кеш, выполнив несколько случайных запросов и проверив.

Как рекомендует @ The-Scrum-Meister, вы можете удалить индекс RemoveMeDate, он ускорит вставку, и если он получитиспользование сейчас уменьшит нагрузку на память.

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

...