"Два инструмента для анализа взаимоблокировок SQL》
"Большая яма, вызванная нулевыми значениями SQL》
Два тематических исследования показывают силу инструмента анализа производительности MySQL.
"Тот же оператор SQL, почему такая большая разница в производительности?》
Подробно описано значение наиболее важного поля типа (тип соединения) в результате объяснения.
На самом деле, в результате объяснения также есть дополнительное поле, которое очень полезно для анализа и оптимизации SQL.Сегодня я потрачу 1 минуту на краткий разговор с вами.
подготовка данных:
create table user (
id int primary key_,_
name varchar(20),
sex varchar(5),
index(name)
)engine=innodb;
insert into user values(1, 'shenjian','no');
insert into user values(2, 'zhangsan','no');
insert into user values(3, 'lisi', 'yes');
insert into user values(4, 'lisi', 'no');
данные показывают:
Таблица пользователей: идентификаториндекс первичного ключа,Такнормальный индекс(неуникальный), полнет индекса;
Четыре ряда записей: в общем указателе имен есть повторяющиеся записи lisi;
Цель:
Создавая различные операторы SQL, объясняя дополнительное поле объяснения и эвристически находя низкопроизводительные операторы SQL для оптимизации.
1. 【Где】
экспериментальная постановка:
explain select * from user where sex='no';
Описание результата:
Дополнительные средства Используя where, SQL использует условия where для фильтрации данных.
нужно знать, это:
(1) возвращает SQL всех записей и не использует условия для фильтрации данных, и высокая вероятность не соответствует ожиданиям.Для этого типа SQL часто необходимо оптимизировать;
(2) SQL с использованием условия where не означает, что оптимизация не требуется, и часто необходимо сотрудничать с типом (типом соединения) в результате объяснения, чтобы всесторонне судить;
Голос за кадром:присоединиться введите "Тот же оператор SQL, почему такая большая разница в производительности?» подробно описано в статье, и эта статья не будет расширяться.
В этом примере, несмотря на то, что поле «Дополнительно» указывает на то, что используется фильтр условия «где», атрибут типа имеет значение «ВСЕ», указывая на то, что все данные необходимо просмотреть, и еще есть место для оптимизации.
Распространенным методом оптимизации является добавление индекса к атрибуту фильтра where.
_Голос за кадром: _В этом примере поле пола не является очень дискриминационным, а добавление индекса имеет ограниченное улучшение производительности.
2.【Использование индекса】
экспериментальная постановка:
explain select id,name from user where name='shenjian';
Описание результата:
Дополнительно означает использование индекса, указывающее, что все данные столбца, которые должен вернуть SQL, находятся в дереве индекса без доступа к фактическим записям строк.
_Голос за кадром: _The column information is retrieved from the table using only information in the index tree without having to do an additional seek to read the actual row.
Такие операторы SQL, как правило, работают лучше.
Вопрос в том, какие данные столбца будут включены в дерево индекса?
3.【Использование условия индекса】
Экспериментальное предложение:
explain select id,name,sex from user
where name='shenjian';
_Голос за кадром: _Разница между этим оператором SQL и предыдущим оператором SQL заключается в том, что запрашиваемый столбец имеет дополнительное поле пола.
Описание результата:
Extra — это условие использования индекса, указывающее, что индекс действительно выполнен, но не все данные столбца находятся в дереве индекса, и необходимо получить доступ к фактическим записям строк.
Голос за кадром:Кластерный индекс, основная разница в реализации обычного индекса, см. "1 минута, чтобы понять разницу между индексами MyISAM и InnoDB.".
Производительность этого типа операторов SQL также выше, но не так хороша, как с использованием индекса.
Вопрос в том, как оптимизировать его для использования индекса?
4. 【Сортировка по файлам】
Экспериментальное предложение:
explain select * from user order by sex;
Описание результата:
Дополнительным является описание Использование файловой сортировки, Чтобы получить требуемый набор результатов, вам необходимо отсортировать все записи в файле.
Такие операторы SQL имеют крайне низкую производительность и нуждаются в оптимизации.
Как правило, файловая сортировка запускается, когда выполняется сортировка по столбцу, который не был проиндексирован.Распространенным решением оптимизации является добавление индекса к столбцу порядка, чтобы избежать полной сортировки для каждого запроса.
Пять, 【Использование временного】
Экспериментальное предложение:
explain select * from user group by name order by sex;
Описание результата:
Дополнительным является использование временного описания, и необходимо создать временную таблицу для временного хранения промежуточных результатов.
Такие операторы SQL имеют низкую производительность и часто нуждаются в оптимизации.
Как правило, когда группировка и сортировка существуют одновременно и воздействуют на разные поля, будет создана временная таблица для расчета окончательного набора результатов.
6. [Использование буфера соединения (блочный вложенный цикл)]
Экспериментальное предложение:
explain select * from user where id in(select id from user where sex='no');
Описание результата:
Дополнительным является описание использования буфера соединения (блочный вложенный цикл), для которого требуется вычисление вложенного цикла.
_Голос за кадром: _Тип внутреннего слоя и внешнего слоя — ALL, а строк — 4, что требует 4*4 вычислений в цикле.
Производительность таких операторов SQL часто низка и нуждается в оптимизации.
Как правило, это происходит, когда две связанные таблицы объединены, а связанные поля не индексируются. Распространенной схемой оптимизации является добавление индекса к связанному полю, чтобы избежать вычисления каждого вложенного цикла.
конец:
Объяснение — наиболее часто используемый инструмент в оптимизации SQL.
-
"Объяснение MySQL, анализ типов》Проведен общий анализ типов
-
В этой статье проводится общий дополнительный анализ
-
"Два инструмента для анализа взаимоблокировок SQL"а также"Большая яма, вызванная нулевыми значениями SQL"это два типичных кейса.
-
"Различия индексов между MyISAM и InnoDB》Является ли анализ различий индексов InnoDB и MyISAM
-
"Что такое индекс базы данных?"является анализом базовой реализации индекса