Несколько ключевых вопросов интервью, связанных с индексами MySQL

MySQL

Вы действительно понимаете индексы MySQL? Эти вопросы помогут вам понять несколько важных аспектов индексирования.

1. Что такое принцип самого левого префикса?

Все следующие ответы основаны на движке MySQL InnoDB.

Например, для следующей таблицы

Если мы строим индекс в соответствии с полем имени, принимается структура дерева B+.Приблизительная структура индекса выглядит следующим образом.

Если мы хотим сделать нечеткий поиск, найдем идентификатор всех, чье имя начинается с «Чжан», то есть оператор sql

select ID from table where name like '张%'

Поскольку в индексе древовидной структуры B+ элементы индекса сортируются в соответствии с порядком полей, появляющихся в определении индекса, при поиске в индексе он может быстро найти тот, у которого есть идентификатор 100, а затемпройти прямо вправовсеЛистчеловек в начале, пока условия не будут выполнены.

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

И это позиционирование в крайнее левое положение, а затем перемещение вправо — это то, что мы называемкрайний левый префикс.

2. Зачем использовать дерево B+ в качестве индекса вместо хеш-таблицы?

1. Хэш-таблица сопоставляет поле индекса с соответствующим хэш-кодом, а затем сохраняет его в соответствующем месте.В этом случае, если мы хотим выполнить нечеткий поиск, очевидно, что структура хеш-таблицы не поддерживается, и мы можем пройтись только по этому столу. Дерево B+ может быстро найти соответствующие данные по принципу крайнего левого префикса.

2. Если мы хотим выполнить поиск по диапазону, например, чтобы найти людей с ID 100~400, хеш-таблица также не поддерживается, и мы можем пройти только по всей таблице.

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

3. В чем разница между индексом первичного ключа и индексом непервичного ключа?

Например, для следующей таблицы (на самом деле в приведенную выше таблицу добавлено поле k), а ID является первичным ключом.

Схематическая диаграмма индекса первичного ключа и индекса непервичного ключа выглядит следующим образом:

где R представляет значение всей строки.

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

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

1. Если оператором запроса является выбор * из таблицы, где ID = 100, то есть метод запроса первичного ключа, вам нужно только искать дерево B+ ID.

2. Если оператором запроса является выбор * из таблицы, где k = 1, то есть метод запроса не с первичным ключом, сначала выполните поиск в индексном дереве k, чтобы получить ID = 100, а затем один раз выполните поиск в индексном дереве идентификаторов. также называется возвращением к столу.

Теперь вы знаете разницу между ними?

4. Почему рекомендуется использовать индекс с автоматически увеличивающимся первичным ключом?

Для этого индексированного дерева первичного ключа

Если мы вставим строку данных с ID = 650, то вставим ее прямо в крайний правый угол

Однако, если вставляется строка данных с ID = 350, поскольку дерево B+ упорядочено, необходимо переместить следующие конечные узлы, чтобы освободить место для вставки данных с ID = 350, что потребует больше времени. R4 расположен заполнен и должен быть сделанразделение страницыэксплуатации, будет еще хуже.

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

Если вы считаете, что статья хорошая, вы также можете: 1,как, чтобы больше людей могли увидеть этот контент.

2,Подписывайтесь на меня, пусть будут долгосрочные отношения

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