Spec-Zone .ru
спецификации, руководства, описания, API
|
MySQL использует оптимизатор на основе издержек, чтобы определить лучший способ разрешить запрос. Во многих случаях MySQL может вычислить самый лучший план запроса, но иногда MySQL не имеет достаточной информации о данных под рукой и должен высказать "образованные" предположения о данных.
Для случаев, когда MySQL не делает "правильной" вещи, инструменты, которые Вы имеете в наличии, чтобы помочь MySQL:
Используйте EXPLAIN
оператор, чтобы получить информацию о том, как MySQL обрабатывает запрос. Чтобы использовать это, только
добавьте ключевое слово EXPLAIN
к
передней стороне Вашего SELECT
оператор:
mysql> EXPLAIN SELECT * FROM t1, t2 WHERE
t1.i = t2.i;
EXPLAIN
обсуждается более подробно в Разделе 13.8.2,"EXPLAIN
Синтаксис".
Использовать ANALYZE TABLE
обновить ключевые дистрибутивы для отсканированной таблицы. См. Раздел
13.7.2.1,"tbl_name
ANALYZE TABLE
Синтаксис".
Использовать FORCE
INDEX
для отсканированной таблицы, чтобы сказать MySQL, что сканирования таблицы очень дороги по
сравнению с использованием данного, индексируйте:
SELECT * FROM t1, t2 FORCE INDEX (index_for_column)WHERE t1.col_name=t2.col_name;
USE INDEX
и IGNORE INDEX
май также быть
полезным. См. Раздел 13.2.9.3, "Индексируйте Синтаксис
Подсказки".
Глобальная переменная и на уровне таблицы STRAIGHT_JOIN
. См. Раздел 13.2.9,"SELECT
Синтаксис".
Можно настроить глобальные или специфичные для потока системные переменные.
Например, запустите mysqld с --max-seeks-for-key=1000
опция или использование SET max_seeks_for_key=1000
сказать оптимизатору предполагать, что никакое
ключевое сканирование не вызывает больше чем 1 000 ключей, ищет. См. Раздел
5.1.4, "Системные Переменные Сервера".