Рубрики
Uncategorized

[Программист шлака, я не администратор базы данных] Объясните MySQL

Автор оригинала: David Wong.

Запишите Объяснения.

Просто приблизительная запись, ежедневное использование Explain заключается в том, чтобы увидеть, используется ли целевой SQL-индекс, то есть использование индекса, но перед написанием этой статьи я использовал Explain, угадав, цель написания этого-организовать собственное обучение, хорошо, в основной теме?

Обычно это относится к сценариям использования:

Добавьте объяснение перед инструкцией запроса для анализа инструкции SQL

mysql> explain select * from servers;
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
| id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | servers | ALL  | NULL          | NULL | NULL    | NULL |    1 | NULL  |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
row in set (0.03 sec)

Результаты анализа состоят из 10 столбцов: id, select_type, таблица, тип, возможные ключи, ключ, key_len, ссылка, строки, Дополнительно. После объяснения по порядку никаких чернил не будет найдено.

  • ИДЕНТИФИКАТОР

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

  • select_type

((1) ПРОСТО (просто ВЫБЕРИТЕ, без ОБЪЕДИНЕНИЯ или подзапроса и т.д.)

((2) ОСНОВНОЙ (если запрос содержит какие-либо сложные подразделы, самый внешний выбор помечается как ОСНОВНОЙ)

(3) ОБЪЕДИНЕНИЕ (второе или последующее утверждение SELECT в ОБЪЕДИНЕНИИ)

(4) ЗАВИСИМОЕ ОБЪЕДИНЕНИЕ (вторая или последующая инструкция SELECT в ОБЪЕДИНЕНИИ, в зависимости от внешнего запроса)

(5) РЕЗУЛЬТАТ ОБЪЕДИНЕНИЯ (результаты ОБЪЕДИНЕНИЯ)

(6) ПОДЗАПРОС (первый ВЫБОР в подзапросе)

(7) ЗАВИСИМЫЙ ПОДЗАПРОС (первый ВЫБОР в подзапросе, в зависимости от внешнего запроса)

(8) ПРОИЗВОДНЫЙ (SELECT, подзапрос предложения FROM производной таблицы)

(9) НЕДОСТУПНЫЙ ПОДЗАПРОС (результаты подзапроса не могут быть кэшированы, и первая строка внешней ссылки должна быть повторно обработана)

  • стол

Какую информацию о таблице запрашивать

  • тип

Найдите конкретные строки и используйте следующие типы: Общие типы: ВСЕ, индекс, диапазон, ссылка, eq_ref, const, система, NULL (слева направо, производительность от низкой до хорошей)

Конкретные пояснения: ВСЕ: Полное сканирование таблицы, MySQL сканирует всю таблицу, чтобы найти соответствующие строки

Индекс: Полное сканирование индекса, индекс отличается от ВСЕХ тем, что тип индекса пересекает только дерево индексов

Диапазон: Извлекайте только строки заданного диапазона, используя индекс для выбора строк

Ссылка: Представляет условие соответствия соединения для приведенной выше таблицы, т. е. Какие столбцы или константы используются для поиска значений в столбцах индекса

Eq_ref: Аналогично ref, разница в том, что используемый индекс является единственным индексом. Для каждого значения ключа индекса в таблице есть только одно совпадение записей. Проще говоря, первичный ключ или уникальный ключ используется в качестве условия ассоциации при объединении нескольких таблиц.

Const, система: Эти типы доступа используются, когда MySQL оптимизирует часть запроса и преобразует ее в константу. Если первичный ключ помещен в список where, MySQL может преобразовать запрос в константу. Система является частным случаем типа const. Если таблица запросов содержит только одну строку, используйте system.

NULL: MySQL разлагает операторы во время оптимизации даже без доступа к таблицам или индексам. Например, выбор минимального значения из столбца индекса может быть выполнен только путем индексирования.

  • возможные ключи

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

Этот столбец полностью не зависит от порядка таблиц, показанных в выходных данных EXPLAIN. Это означает, что некоторые ключи в possible_keys фактически не могут использоваться в сгенерированном порядке таблиц. Если столбец равен НУЛЮ, соответствующий индекс отсутствует. В этом случае вы можете повысить производительность запроса, проверив предложение WHERE, чтобы узнать, ссылается ли оно на определенные столбцы или столбцы, подходящие для индексирования. Если это так, создайте соответствующий индекс и еще раз проверьте запрос с помощью команды ОБЪЯСНИТЬ

  • ключ

Столбец ключ показывает ключ (индекс), который MySQL фактически решает использовать!! Это настоятельно рекомендуется сосредоточить внимание на

Если индекс не выбран, ключ равен НУЛЮ. Чтобы заставить MySQL использовать или игнорировать индексы в столбце possible_keys, используйте ПРИНУДИТЕЛЬНЫЙ ИНДЕКС, ИСПОЛЬЗУЙТЕ ИНДЕКС или ИГНОРИРУЙТЕ ИНДЕКС в запросах.

  • длина ключа

Представляет количество байтов, используемых в индексе, и длина индекса, используемого в запросе, может быть вычислена по столбцу (значение, показанное key_len, является максимально возможной длиной поля индекса, а не фактической длиной, то есть key_len рассчитывается в соответствии с определением таблицы, а не извлекается из таблицы).

Без потери точности, чем короче длина, тем лучше

  • ссылка

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

  • строки

Представляет предполагаемое количество строк, которые MySQL должен прочитать, чтобы найти необходимые записи на основе статистики таблиц и выбора индекса

  • Дополнительный

Этот столбец содержит подробные сведения о разрешении запросов MySQL в следующих случаях:

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

Использовать временные: Означает, что MySQL необходимо использовать временные таблицы для хранения наборов результатов, часто при сортировке и группировке запросов

Используйте сортировку файлов: Операции сортировки в MySQL, которые невозможно выполнить с помощью индексов, называются “сортировкой файлов”

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

Невозможно где: Это значение подчеркивает, что операторы where приводят к неквалифицированным строкам.

Выберите таблицы, оптимизированные отдельно: Это значение означает, что при использовании только индексов оптимизатор может возвращать только одну строку из результата агрегатной функции

Вывод: ОБЪЯСНЕНИЕ не расскажет вам о триггерах, хранимых процедурах или влиянии пользовательских функций на запросы * ОБЪЯСНЕНИЕ не учитывает все виды кэша, ОБЪЯСНЕНИЕ не показывает оптимизацию, которую выполняет MySQL при выполнении запросов, часть статистики оценивается, а не точна. ОБЪЯСНЕНИЕ может интерпретировать только операции ВЫБОРА, а другие операции необходимо переписать, чтобы ВЫБРАТЬ для просмотра плана выполнения.