Ключевые слова объяснения mysql

задняя часть база данных MySQL SQL

оптимизация mysql очень важна в фактической разработке, многие могут оценить качество и эффективность самостоятельно, чтобы написать sql, mysql предоставляет нам дополнительное оружие, объясните нам, он показывает нам, что mysql получил план выполнения инструкции sql, искоренить результаты вернулся может объяснить sql умею писать,

демонстрационная база данных

оператор создания таблицы

CREATE TABLE test (
  id    INT(11) NOT NULL AUTO_INCREMENT,
  uname VARCHAR(255),
  age int,
  PRIMARY KEY (id)
);

alter table test add index uname_index(uname);

Данные в таблице следующие

id uname age
1 lxh 24
3 zhangsan 23
10 sdsx 12
11 x33 35

Есть много ключевых слов для объяснения, и здесь объясняются только самые важные типы, ключи и строки.

type

Тип, официальное целое «тип соединения», означающее «тип соединения», обратите внимание, что это не буквальная связь между шкалами, это именно способ для механизма базы данных искать таблицы, автор книги «Высокая производительность MySQL», я думаю, правильнее будет назвать его типом доступа;

Существует целых 14 типов типов.Здесь записываются и понимаются только шесть наиболее важных и часто встречающихся типов, а именно all, index, range, ref, eq_ref и const. Слева направо их эффективность возрастает в порядке

all

Полное сканирование таблицы, если в sql появляется тип all, который просто ищет элемент данных, значит, sql находится в самом исходном состоянии, и есть много места для оптимизации. Возьмите тестовую таблицу в качестве примера

index

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

ref

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

eq_ref

По сравнению с ref_eq ref place is крупного рогатого скота, он знает, что этот тип набора результатов поиска является только одним, используя первичный ключ или уникальный индекс, чтобы найти время, В следующих двух таблицах перечислены учащиеся, таблица результатов, идентификатор учащегося в таблице результатов, t_id, который должен использовать первичный ключ.

-- 建表语句
create table ref_stu2 (
  id    INT(11) NOT NULL AUTO_INCREMENT,
  uname VARCHAR(255),
  age   VARCHAR(255),
  PRIMARY KEY (id)
);

create table ref_score2 (
  id     INT(11) NOT NULL AUTO_INCREMENT,
  stu_id int(11) not null,
  score  int(11),
  PRIMARY KEY (id)
 
);

explain select * from ref_stu2 stu, ref_score2 sc where stu.id = sc.stu_id;

выходной результат

id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE stu NULL ALL PRIMARY NULL NULL NULL 1 100 NULL
1 SIMPLE sc NULL eq_ref uk_score_stuid uk_score_stuid 4 lxhtest.stu.id 1 100 NULL

const

Поместите первичный ключ позади where в качестве условного запроса, и оптимизатор mysql может преобразовать эту оптимизацию запроса в константу.

explain select * from ref_stu2 stu where stu.id = 1;

Результат выполнения следующий

id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE stu null const PRIMARY PRIMARY 4 const 1 100 null

key

Когда в запросе используется индекс index_merge (запрос использует более двух индексов), здесь может быть более двух индексов, и здесь будет отображаться только один из других select_types.

rows

Здесь указано примерное количество строк сканирования в плане выполнения, а не точное значение, чем меньше значение, тем выше эффективность.

покрытие индекса

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

Ссылаться наИндекс покрытия для оптимизации MySQL SQL

Использует ли подобное ключевое слово индекс

Резюме: Предпосылкой того, использует ли ключевое слово like индекс, является принцип префикса, то есть «x» и «x%» используют индекс, тип их плана выполнения — диапазон, а количество строк меньше числа строк в таблице.Два других типа являются индексными, что называется полным сканированием индекса и описывается следующим образом. Если запрос содержит определенную строку во время нечеткого запроса, вы можете использовать функцию locate,select * from test where locate("x",uname);Запросить поле UNAME в таблице TEST и содержать данные со строкой «x».

полное сканирование таблицы mysql, полное сканирование индекса, покрытие индекса (индекс покрытия)

полное сканирование индекса: полное сканирование индекса, при запросе просматривайте дерево индекса для получения строк данных. Случайный ввод-вывод, если данные не плотные В плане выполнения есть столбец Тип, индекс

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

Покрывающий индекс: Покрывающий индекс.Если столбец условия where и возвращаемые данные находятся в индексе, то нет необходимости искать таблицу, тогда он называется покрывающим индексом. В плане выполнения есть дополнительный столбец, использующий индекс

full index scan vs full table scan

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

Большая часть данных хранится на диске, и количество операций чтения с диска является ключом к эффективности. Поскольку указатели в индексе используются для доступа к записям одна за другой после сканирования индекса, при условии, что доступ к каждой записи осуществляется с использованием индекса, количество считываний с диска равно количеству записей T, содержащихся в запросе; Если таблица сканируется, количество считываний с диска равно количеству блоков B, в которых хранятся записи; Если T>B, индекс не имеет преимущества. Для большинства баз данных это соотношение составляет 10% (oracle, postgresql и т. д.). При окончательном выполнении сначала оценивают количество результатов. Если оно меньше (T

Привожу пример из интернета Известна следующая информация: Предположим, что таблица содержит 100 000 строк данных -------- 100 000 строк Мы хотим прочитать 20% (20 000) строк данных ---- 20 000 строк Размер данных каждой строки в таблице составляет 80 байт ---------- 80 байт Размер блока данных в базе данных составляет 8 КБ ------- 8000 байт. Итак, есть следующие результаты: Каждый блок данных содержит 100 строк данных --------- 100 строк (размер блока данных/размер каждой строки данных 8000/80) Эта таблица имеет в общей сложности 1000 блоков данных ------- 1000 блоков (общее количество данных/количество данных, содержащихся в каждом блоке 100000/100)

история спины:

Прочитать 20 000 строк данных через индекс = около 20 000 обращений к таблице по rowid = нужно обработать 20 000 блоков для выполнения этого запроса (прочитать данные через индекс, найти ключевое значение в индексе, а затем прочитать таблицу с rowid, соответствующей значение ключа Data, rowid соответствует только одной записи, поэтому чтение блока предназначено только для поиска записи, соответствующей rowid, поэтому считывайте только одну запись в одном блоке за раз) И если это полное сканирование таблицы, то таблица имеет в общей сложности 1000 блоков, что составляет 1000 операций чтения, и последнее, очевидно, эффективно.

Итог: я недавно смотрел на монго и обнаружил, что в монго тоже есть это ключевое слово, ха-ха, оно вроде универсальное.

Ссылка на ссылку:Объяснение типа объяснения в mysql Почему ваше подобное заявление не проиндексировано?

Amway один из моих блогов:Блог Линнкша