Анализ параметра объяснения в оптимизации операторов MySQL

задняя часть MySQL SQL

Какая польза?

В MySQL, когда объем данных становится очень большим, необходимо использовать индексы для оптимизации операторов SQL.Как мы можем судить, хороши ли операторы SQL, над написанием которых мы так усердно работали? В этот моментexplainпригодился.

как использовать?

explain + SQL语句即可 如:explain select * from table;

следующим образом

explain参数

Я полагаю, что друзья, впервые использующие параметр объяснения, будут задаваться вопросом, какой смысл в таком большом количестве параметров? Автор собрал некоторую информацию и сделал здесь краткое изложение, надеясь помочь всем понять.


Введение параметра

id

如果是子查询,id的序号会递增,id的值越大优先级越高,越先被执行

select_type

Тип запроса, который в основном используется для различения сложных запросов, таких как обычные запросы, запросы на объединение, подзапросы и т. д. SIMPLE: простой запрос на выборку, который не содержит подзапросов или UNION. ОСНОВНОЙ: если запрос содержит какие-либо сложные подразделы, самый внешний запрос помечается как ОСНОВНОЙ (загруженный последним). ПОДЗАПРОС: подзапрос включен в список SELECT или WHERE. DERIVED: Подзапросы, содержащиеся в списке FROM, помечаются как DERIVED (производные). Mysql будет рекурсивно выполнять эти подзапросы и помещать результаты во временную таблицу. UNION: Если второй SELECT появляется после UNION, он помечается как UNION; если UNION включен в запрос предложения FROM, внешний SELECT будет помечен как: DERIVED UNION RESULT: SELECT, чтобы получить результаты из таблицы UNION тип

	显示查询使用了何种类型
	从最好到最差依次是
System>const>eq_ref>range>index>All(**全表扫描**)
	一般来说**至少达到range级别,最好达到ref**
System:表只有一行记录,这是const类型的特例,平时不会出现(忽略不计)
const:表示通过索引一次就找到了,const用于比较primary key或者unique索引,因为只匹配一行数据,所以很快。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。
eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描。
ref:非唯一索引扫描,返回匹配某个单独值的行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而它可能会找到多个符合条件的行,所以它应该属于查找和扫描的混合体
range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引,一般就是在你的where语句中出现了between、<、>、in等的查询。这种范围扫描索引比全表扫描要好,因为它只需要开始于索引的某一点,而结束于另一点,不用扫描全部索引。
index:FULL INDEX SCAN,index与all区别为index类型只遍历索引树。这通常比all快,因为索引文件通常比数据文件小。

extra

Содержит важную дополнительную информацию, которая не помещается в другие столбцы. Включенная информация: **(Опасно!)**Использование файловой сортировки: указывает, что mysql будет использовать внешний индекс для сортировки данных вместо чтения в порядке индекса в таблице, операцию сортировки, которую невозможно выполнить с помощью индекса в MYSQL. называется "сортировка файлов" **(Особенно опасно!)**Использование временных: временная таблица используется для хранения промежуточных результатов, а MYSQL использует временную таблицу при сортировке результатов запроса. Обычно используется для сортировки по порядку и группировки группы запросов по Использование индекса: указывает, что в соответствующей операции выбора используется покрывающий индекс, чтобы избежать доступа к строкам данных таблицы, и эффективность хорошая. Если использование where появляется одновременно, это указывает на то, что индекс используется для выполнения поиска значения ключа индекса; если использование where не появляется одновременно, это указывает на то, что индекс используется для чтения данных, а не для выполнения операций поиска.

possible_keys

Отображает один или несколько индексов, которые можно применить к этой таблице. Если в поле, задействованном в запросе, есть индекс, он будет указан, но не обязательно будет использоваться запросом.

key

Фактический используемый индекс, если NULL, индекс не используется. Если в запросе используется покрывающий индекс, индекс появляется только в списке ключей, а параметр ключа может использоваться как критерий для использования индекса.

key_len

: указывает количество байтов, используемых в индексе. Этот столбец можно использовать для расчета длины индекса в запросе. Без потери точности, чем короче длина, тем лучше. Значение, отображаемое key_len, представляет собой максимально возможную длину поле индекса, а не фактическая длина.Используйте длину, то есть key_len вычисляется в соответствии с определением таблицы, а не извлекается из таблицы.

ref

Показывает, какой столбец индекса используется, если возможно, константа. Какие столбцы или константы используются для поиска значения в индексе.

rows

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