[Интеллект-карта — глава индекса] Получение индекса базы данных так просто

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

Эта статья была добавлена ​​в документ с открытым исходным кодом: JavaGuide (обложка, которая охватывает основные знания, которые необходимо освоить большинству Java-программистов). адрес:GitHub.com/snail Climb/….

Интеллект-карта — Индекс

Ряд исходных файлов карт разума (база данных + архитектура) и программное обеспечение для создания карт разума - установка XMind8 для взлома, общедоступный номер: «Руководство по прохождению интервью на Java», справочный ответ:«Карта разума»Получите это бесплатно! (Изображение ниже не очень четкое, исходное изображение очень четкое, и исходный файл также предоставляется каждому для изменения в соответствии со своими потребностями)

【思维导图-索引篇】

Вот некоторые из моих дополнений

Почему индексы улучшают скорость запросов

Далее организовано из: адрес:nuggets.capable/post/684490…Добавить Автора

Начнем с базовой структуры хранения MySQL.

Базовая структура хранения MySQL — это страница (записи хранятся на странице):

MySQL的基本存储结构是页

  • Каждая страница данных может образовывать двусвязный список
  • Записи на каждой странице данных могут образовывать односвязный список.
    • Каждая страница данных будет генерировать каталог страниц для хранящихся в нем записей.При поиске записи по первичному ключу вы можете использовать метод дихотомии в каталоге страниц, чтобы быстро найти соответствующий слот, а затем пройти слот, соответствующий группа для быстрого поиска указанной записи
    • Используйте другие столбцы (не первичные ключи) в качестве критериев поиска: просматривайте каждую запись в односвязном списке только последовательно, начиная с самой маленькой записи.

Итак, если мы напишем оператор sql, такой как select * from user, где indexname = 'xxx' без какой-либо оптимизации, он сделает это по умолчанию:

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

Очевидно, что этот поиск будет медленным с большим объемом данных! Такая временная сложность равна O(n).

после использования индекса

Что делает индекс для ускорения наших запросов? По сути, это превратить неупорядоченные данные в упорядоченные (относительные):

Чтобы найти запись с id 8 коротких шагов:

Очевидно: без индексации нам нужно пройти по двусвязному списку, чтобы найти соответствующую страницу, теперь через"содержание"Вы можете быстро найти соответствующую страницу! (Двоичный поиск, временная сложность примерно O(logn))

На самом деле базовая структура — это дерево B+, которое как реализация дерева позволяет нам быстро находить соответствующие записи.

Дополнительная важная информация об индексации

Следующее содержание организовано из: "Путь развития инженера Java"

крайний левый префикс

Индекс в MySQL может ссылаться на несколько столбцов в определенном порядке.Такой тип индекса называется объединенным индексом. Например, имя и город таблицы User плюс объединенный индекс (имя, город) o и принцип крайнего левого префикса означает, что если условие запроса точно соответствует одному или нескольким последовательным столбцам в левой части индекса, этот столбец можно использовать. следующее:

select * from user where name=xx and city=xx ; //可以命中索引
select * from user where name=xx ; // 可以命中索引
select * from user where city=xx; // 法命中索引            

Здесь следует отметить, что если в запросе используются оба условия, но в другом порядке, напримерcity= xx and name =xx, то текущий механизм запросов автоматически оптимизируется в соответствии с порядком объединенного индекса, чтобы индекс можно было использовать.

Из-за принципа крайнего левого префикса при создании объединенного индекса порядок полей индекса должен учитывать количество значений полей после дедупликации и ставить больше впереди. Предложение ORDERBY также следует этому правилу.

Будьте осторожны, чтобы избежать избыточных индексов

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

После версии MySQL S.7 вы можете запросить библиотеку sysschemal_r dundant_indexesтаблица для просмотра избыточных индексов

Как Mysql добавляет индексы к полям таблицы? ? ?

1. Добавьте PRIMARY KEY (индекс первичного ключа)

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 

2. Добавьте UNIQUE (уникальный индекс)

ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 

3. Добавьте ИНДЕКС (обычный индекс)

ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4. Добавьте FULLTEXT (полнотекстовый индекс)

ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 

5. Добавьте многоколоночный индекс

ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

Ссылаться на

Если ты расцветешь, ветерок придет. Добро пожаловать в мою общедоступную учетную запись WeChat: «Руководство по прохождению интервью на Java», теплую общедоступную учетную запись WeChat. Ответьте на ключевое слово "1" в фоновом режиме официального аккаунта, возможно, вы увидите то, что хотите!