mysql: тот же медленный выбор, даже если таблица не меняется - PullRequest
0 голосов
/ 22 ноября 2018

Таблица объявлений имеет около 0,5 млн. Строк.

Время от времени я использую

select sql_calc_found_rows * from `ads` 
where cat1<>24 and 
      curdate()<=expiry and 
      offl=0 
order by ads.date desc ,id desc 
limit 0,30

Каждый раз, когда это требуется почти в одно и то же время - даже если реклама не меняется.MySQL не замечает этот факт?и ускорить ???поэтому, когда запрос приходит снова, время должно быть почти равно нулю.

1 Ответ

0 голосов
/ 23 ноября 2018

Кэш запросов

  • Если настроен контроль качества, и
  • Если таблица не изменилась с тех пор, как был идентичный запрос выполнить и
  • Если удовлетворены несколько других тонких вещей, то

КК очень быстро доставит сохраненный набор результатов.Однако из-за того, что ограничение таблицы не изменилось, производственные системы редко получают выгоду от QC.

innodb_buffer_pool

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

В последующие периоды выполнения запроса данные могут все еще находиться в этом кэше.Если это так, это будет быстрее.

Индексы

Правильная индексация - это ваша первая линия защиты для ускорения запросов.Этот конкретный запрос может выиграть от одного из следующих.(Трудно сказать, какой из них будет лучшим; будет использоваться только один.)

INDEX(date, id)
INDEX(offl, expiry)
INDEX(offl, cat1, expiry)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...