Проблемы, связанные с оптимизатором

MySQL использует оптимизатор затрат для определения лучшего способа разрешения запроса. В большинстве случаев MySQL способен вычислить наиболее эффектив­ ный из возможных план, но иногда у него в наличии нет достаточного количества ин­ формации по данным, и ему приходится строить о них логические предположения.


В ситуациях, когда MySQL делает не то, что нужно, помочь ему можно следующим образом:


■ Воспользуйтесь оператором EXPLAIN , чтобы получить информацию о том, каким
образом MySQL будет обрабатывать запрос. Для этого необходимо просто доба­
вить ключевое слово EXPLAIN в начале оператора SELECT .


mysql> EXPLAIN SELECT * FROM tl, t2 WHERE tl.i = t2.i;


Оператор EXPLAIN более подробно рассматривается в книге MySQL . Руководство администратора.



  • Используйте ANALYZE TABLE имя_таблицы для обновления распределений ключей сканируемой таблицы.
  • Используйте FORCE INDEX для сканируемой таблицы, чтобы сообщить MySQL о том, что сканирование таблиц обходится дороже по сравнению с применением данного индекса.

SELECT * FROM tl , t 2 FORCE INDEX (индекс_по_столбцу) WHERE tl .имя_столбца=12.имя_столбца;


Также могут пригодиться USE INDEX и IGNORE INDEX .



  • Используйте STRAIGHT _ JOIN как глобально, так и на уровне таблиц.
  • Можно настроить глобальные и сеансовые системные переменные. Например, запустите mysqld с опцией —- max – seeks – for – key =1000 или используйте SET max _ seeks _ for _ key =1000, чтобы оптимизатор при сканировании ключей разрешал не более 1000 найденных ключей.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: