Крутые ребята, возможно, перешли на NoSQL, но для многих из нас реляционные базы данных остаются важной частью повседневной веб-разработки. Я также готов поспорить, что реляционные базы данных будут еще через десять лет. Несмотря на наше знакомство, синтаксис SQL является мрачным искусством. Единственный человек, который понимает SQL, — тот странный парень с бородой и сандалиями, который бормочет себе в углу вашего офиса. Все остальные используют силу и проводят много разочарованных часов, бесцельно глядя на сломанные запросы SELECT.
MySQL и MariaDB предоставляют полезную команду EXPLAIN
которая может анализировать ваши запросы и выявлять потенциальные проблемы с производительностью:
-
EXPLAIN
описывает, как будет обрабатыватьсяSELECT
, включая информацию оJOINS
. -
EXPLAIN EXTENDED
предоставляет дополнительную информацию и оценивает количество строк таблицы, отфильтрованных по условию.
Команда просто добавляется в начало вашего запроса, например
EXPLAIN SELECT * FROM `user`;
Выходной результат:
+----+-------------+-------+------+---------------+------+---------+------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-------+ | 1 | SIMPLE | user | ALL | NULL | NULL | NULL | NULL | 4 | | +----+-------------+-------+------+---------------+------+---------+------+------+-------+
Хм — что это все значит?
К счастью, эти хорошие люди в MariaDB предоставили полезный анализатор, чтобы объяснить ваши ОБЪЯСНЕНИЯ:
https://mariadb.org/explain_analyzer/
Вы можете вставить полученную таблицу в поле Отправить новое объяснение и нажать кнопку « Анализ» …
Нажмите на любой жирный подчеркнутый текст для получения дополнительной информации о результате EXPLAIN
.
Извлечение EXPLAIN таблиц
К сожалению, извлечение таблицы EXPLAIN
может быть немного сложнее. Если вы используете интерфейс командной строки mysql>, результат можно обернуть:
+----+-------------+-------+------+---------------+------+---------+------+----- -+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+----- -+-------------+ | 1 | SIMPLE | user | ALL | NULL | NULL | NULL | NULL | 4 | Using where | +----+-------------+-------+------+---------------+------+---------+------+----- -+-------------+
Копирование непосредственно из консоли в Анализатор не будет работать, если вы сначала не удалите необходимые разрывы строк. Вы можете увеличить ширину окна консоли, но нет гарантии, что все результаты подойдут.
Лучшая альтернатива — вывести результат в текстовый файл и скопировать оттуда таблицу EXPLAIN
. Если вы используете командную строку MySQL, команда tee
перенаправит весь вывод консоли в именованный файл, например
mysql> tee out.txt
(Обратите внимание, что пути к файлам должны использовать косую черту ‘/’ даже в Windows.)
Кроме того, вы можете использовать параметр командной строки \ T при запуске mysql:
> mysql \T "out.txt"
Или, если вы чувствуете себя особенно смелым, вы можете направить весь вывод EXPLAIN в файл с помощью одной команды:
> mysql -u [dbuser] -p[dbpass] -e "[query]" > out.txt
где:
-
[dbuser]
— имя пользователя базы данных -
[dbpass]
— пароль пользователя базы данных (между ключом -p и паролем нет пробела) -
[query]
является оператором SQL, например,USE mydatabase; EXPLAIN SELECT * FROM mytable;
USE mydatabase; EXPLAIN SELECT * FROM mytable;
В этом случае путь к выходному имени файла должен соответствовать стандарту вашей ОС, то есть «\» в Windows и «/» в Mac или Linux.
Explain Analyzer — отличный инструмент, который объясняет EXPLAIN на простом английском языке. Вскоре вы станете гуру SQL в вашей команде … начните отращивать бороду.