Spec-Zone .ru
спецификации, руководства, описания, API
|
Вывод от EXPLAIN
шоу ALL
в type
столбец, когда MySQL использует полное сканирование
таблицы, чтобы разрешить запрос. Это обычно происходит при следующих условиях:
Таблица является настолько маленькой, что это быстрее, чтобы выполнить сканирование таблицы чем обеспокоиться ключевым поиском. Это характерно для таблиц меньше чем с 10 строками и короткой длиной строки.
Нет никаких применимых ограничений в ON
или WHERE
пункт для индексированных столбцов.
Вы сравниваете индексированные столбцы с постоянными величинами, и MySQL вычислил
(основанный на индексировать дереве), что константы покрывают слишком большую часть таблицы и что
сканирование таблицы было бы быстрее. См. Раздел
8.2.1.2, "MySQL How Оптимизирует WHERE
Пункты".
Вы используете ключ с низким количеством элементов (много строк соответствуют значение ключа) через другой столбец. В этом случае MySQL предполагает, что при использовании ключа, вероятно, сделает много ключевых поисков и что сканирование таблицы было бы быстрее.
Для маленьких таблиц сканирование таблицы часто является соответствующим, и воздействие производительности незначительно. Для больших таблиц попробуйте следующие методы, чтобы избежать иметь оптимизатор, неправильно выбирают сканирование таблицы:
Использовать 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
;
Запустите mysqld с --max-seeks-for-key=1000
опция или использование SET
max_seeks_for_key=1000
сказать оптимизатору предполагать, что никакое ключевое сканирование не
вызывает больше чем 1 000 ключей, ищет. См. Раздел 5.1.4,
"Системные Переменные Сервера".