Эта статья была добавлена в документ с открытым исходным кодом: JavaGuide (обложка, которая охватывает основные знания, которые необходимо освоить большинству Java-программистов). адрес:GitHub.com/snail Climb/….
Интеллект-карта — Индекс
Ряд исходных файлов карт разума (база данных + архитектура) и программное обеспечение для создания карт разума - установка XMind8 для взлома, общедоступный номер: «Руководство по прохождению интервью на Java», справочный ответ:«Карта разума»Получите это бесплатно! (Изображение ниже не очень четкое, исходное изображение очень четкое, и исходный файл также предоставляется каждому для изменения в соответствии со своими потребностями)
Вот некоторые из моих дополнений
Почему индексы улучшают скорость запросов
Далее организовано из: адрес:nuggets.capable/post/684490…Добавить Автора
Начнем с базовой структуры хранения MySQL.
Базовая структура хранения MySQL — это страница (записи хранятся на странице):
- Каждая страница данных может образовывать двусвязный список
-
Записи на каждой странице данных могут образовывать односвязный список.
- Каждая страница данных будет генерировать каталог страниц для хранящихся в нем записей.При поиске записи по первичному ключу вы можете использовать метод дихотомии в каталоге страниц, чтобы быстро найти соответствующий слот, а затем пройти слот, соответствующий группа для быстрого поиска указанной записи
- Используйте другие столбцы (не первичные ключи) в качестве критериев поиска: просматривайте каждую запись в односвязном списке только последовательно, начиная с самой маленькой записи.
Итак, если мы напишем оператор sql, такой как select * from user, где indexname = 'xxx' без какой-либо оптимизации, он сделает это по умолчанию:
- Найдите страницу, на которой находится запись: вам нужно пройти по двусвязному списку, чтобы найти страницу, на которой она находится.
- Найдите соответствующую запись на странице, на которой вы находитесь: поскольку она не основана на запросе первичного ключа, вы можете просматривать только односвязный список страницы, на которой вы находитесь.
Очевидно, что этот поиск будет медленным с большим объемом данных! Такая временная сложность равна 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` )
Ссылаться на
- «Путь развития инженера Java»
- MySQL High Performance Book_3rd Edition
- nuggets.capable/post/684490…
Если ты расцветешь, ветерок придет. Добро пожаловать в мою общедоступную учетную запись WeChat: «Руководство по прохождению интервью на Java», теплую общедоступную учетную запись WeChat. Ответьте на ключевое слово "1" в фоновом режиме официального аккаунта, возможно, вы увидите то, что хотите!