РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
265 of 1392 menu

Метод explain

Метод explain применяется к запросу Eloquent или Query Builder и возвращает информацию о том, как база данных будет выполнять данный запрос. Метод не принимает параметров и возвращает коллекцию с планом выполнения, который содержит данные о используемых индексах, типе соединения, количестве проверяемых строк и других важных для оптимизации показателях.

Синтаксис

<?php $res = Model::explain(); ?>

Пример

Давайте получим план выполнения простого запроса для модели Article:

<?php use AppModelsArticle; $res = Article::where('status', 'active')->explain(); echo $res; ?>

Результат выполнения кода:

[ { "id": 1, "select_type": "SIMPLE", "table": "articles", "type": "ALL", "possible_keys": null, "key": null, "key_len": null, "ref": null, "rows": 1500, "Extra": "Using where" } ]

Как видно из результата, запрос выполняет полное сканирование таблицы (тип ALL), так как не используется индекс. Поле rows показывает, что будет проверено 1500 строк.

Пример

Теперь рассмотрим более сложный запрос с соединением таблиц:

<?php use AppModelsArticle; use IlluminateSupportFacadesDB; $res = Article::join('categories', 'articles.category_id', '=', 'categories.id') ->where('articles.published', true) ->explain(); echo $res; ?>

Результат выполнения кода:

[ { "id": 1, "select_type": "SIMPLE", "table": "categories", "type": "ALL", "possible_keys": "PRIMARY", "key": null, "key_len": null, "ref": null, "rows": 50, "Extra": null }, { "id": 1, "select_type": "SIMPLE", "table": "articles", "type": "ref", "possible_keys": "articles_category_id_index", "key": "articles_category_id_index", "key_len": 8, "ref": "categories.id", "rows": 30, "Extra": "Using where" } ]

В этом примере видно, что для таблицы articles используется индекс articles_category_id_index, что значительно ускоряет выполнение запроса. Тип ref указывает на эффективное использование индекса для соединения.

Пример

Метод explain также полезен для анализа запросов с агрегацией:

<?php use AppModelsArticle; $res = Article::select('category_id') ->where('views', '>', 1000) ->groupBy('category_id') ->having('count', '>', 5) ->explain(); echo $res; ?>

Результат выполнения кода:

[ { "id": 1, "select_type": "SIMPLE", "table": "articles", "type": "range", "possible_keys": "articles_views_index", "key": "articles_views_index", "key_len": 8, "ref": null, "rows": 200, "Extra": "Using where; Using temporary; Using filesort" } ]

Обратите внимание на поле Extra, которое содержит "Using temporary; Using filesort". Это означает, что для выполнения запроса потребуется создание временной таблицы и сортировка, что может быть неэффективно при большом объёме данных.

Смотрите также

  • метод toSql,
    который возвращает SQL-запрос без выполнения
  • метод toRawSql,
    который возвращает SQL с подставленными значениями
  • метод dd,
    который выводит запрос и останавливает выполнение
  • метод dump,
    который выводит запрос без остановки выполнения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить