Spec-Zone .ru
спецификации, руководства, описания, API
|
Когда EXPLAIN
используется с EXTENDED
ключевое слово, вывод включает a filtered
столбец, не иначе выведенный на экран. Этот столбец указывает на предполагаемый процент строк таблицы, которые
будут фильтроваться по табличному условию. Кроме того, оператор производит дополнительную информацию, которая
может быть просмотрена, выходя a SHOW
WARNINGS
оператор после EXPLAIN
оператор. Message
значение в SHOW WARNINGS
вывод выводит на экран, как оптимизатор квалифицирует имена
таблиц и имена столбцов в SELECT
оператор, что SELECT
похож после приложения правил перезаписи и оптимизации, и возможно других примечаний о процессе оптимизации. Вот
пример:
mysql>EXPLAIN EXTENDED
->SELECT t1.a, t1.a IN (SELECT t2.a FROM t2) FROM t1\G
*************************** 1. row *************************** id: 1 select_type: PRIMARY table: t1 type: indexpossible_keys: NULL key: PRIMARY key_len: 4 ref: NULL rows: 4 filtered: 100.00 Extra: Using index*************************** 2. row *************************** id: 2 select_type: SUBQUERY table: t2 type: indexpossible_keys: a key: a key_len: 5 ref: NULL rows: 3 filtered: 100.00 Extra: Using index2 rows in set, 1 warning (0.00 sec)mysql>SHOW WARNINGS\G
*************************** 1. row *************************** Level: Note Code: 1003Message: /* select#1 */ select `test`.`t1`.`a` AS `a`, <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (/* select#2 */ select `test`.`t2`.`a` from `test`.`t2` where 1 having 1 ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on <auto_key> where ((`test`.`t1`.`a` = `materialized-subquery`.`a`))))) AS `t1.a IN (SELECT t2.a FROM t2)` from `test`.`t1`1 row in set (0.00 sec)
EXPLAIN
EXTENDED
может использоваться с SELECT
,
DELETE
,
INSERT
,
REPLACE
, и UPDATE
операторы. Однако, следующий SHOW WARNINGS
оператор выводит на экран непустой результат только для SELECT
операторы.
Поскольку оператор, выведенный на экран SHOW
WARNINGS
может содержать специальные маркеры, чтобы предоставить информацию о перезаписи запроса или
действиях оптимизатора, оператор является не обязательно допустимым SQL и не предназначается, чтобы быть
выполненным. Вывод может также включать строки с Message
значения, которые
обеспечивают дополнительные примечания не-SQL о мерах, предпринятых оптимизатором.
Следующий список описывает специальные маркеры, которые могут появиться в EXTENDED
вывод, выведенный на экран SHOW WARNINGS
:
<auto_key>
Автоматически сгенерированный ключ для временной таблицы.
<cache>(
expr
)
Выражение (такое как скалярный подзапрос) выполняется однажды, и получающееся значение сохраняется в
памяти для более позднего использования. Для результатов, состоящих из многократных значений, может
быть создана временная таблица, и Вы будете видеть <temporary
table>
вместо этого.
<exists>(
query
fragment
)
Предикат подзапроса преобразовывается в EXISTS
предикат и подзапрос
преобразовываются так, чтобы это могло использоваться вместе с EXISTS
предикат.
<in_optimizer>(
query
fragment
)
Это - внутренний объект оптимизатора без пользовательского значения.
<index_lookup>(
query
fragment
)
Фрагмент запроса обрабатывается, используя индексировать поиск, чтобы найти строки квалификации.
<if>(
condition
,
expr1
, expr2
)
Если условие является истиной, оцените к expr1
, иначе expr2
.
<is_not_null_test>(
expr
)
Тест, чтобы проверить, что выражение не оценивает к NULL
.
<materialize>(
query
fragment
)
Материализация подзапроса используется.
`materialized-subquery`.
col_name
Ссылка на столбец col_name
во внутренней временной
таблице, осуществленной, чтобы содержать следствие оценки подзапроса.
<primary_index_lookup>(
query
fragment
)
Фрагмент запроса обрабатывается, используя поиск первичного ключа, чтобы найти строки квалификации.
<ref_null_helper>(
expr
)
Это - внутренний объект оптимизатора без пользовательского значения.
/* select#
N
*/ select_stmt
SELECT
связывается со строкой в не -EXTENDED
EXPLAIN
вывод, который имеет id
значение
N
.
outer_tables
semi
join (inner_tables
)
Работа полуобъединения. inner_tables
показывает таблицы,
которые не были вытащены. См. Раздел
8.13.16.1, "Оптимизируя Подзапросы с Преобразованиями Полуобъединения".
<temporary table>
Это представляет внутреннюю временную таблицу, создаваемую, чтобы кэшировать промежуточный результат.