Как работает индексирование базы данных…

Индекс базы данных — это структура данных, повышающая скорость операций извлечения данных из базы данных.

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

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

Индекс может быть объявлен как UNIQUE, что создает неявное ограничение для базовой таблицы. Системы баз данных обычно неявно создают индекс для набора столбцов, объявленных PRIMARY KEY, и некоторые из них могут использовать уже существующий индекс для обеспечения соблюдения этого ограничения. Многие системы баз данных требуют, чтобы как ссылочные, так и ссылочные наборы столбцов в ограничении FOREIGN KEY были проиндексированы, что повышает производительность операций вставки, обновления и удаления в таблицах, участвующих в ограничении.

Полезные индексные запросы:

Подобно тому, как читатель ищет слово в книге, индекс помогает, когда вы ищете конкретную запись или набор записей с предложением WHERE. Сюда входят запросы, ищущие диапазон значений, запросы, предназначенные для сопоставления определенного значения, и запросы, выполняющие соединение двух таблиц. Например, мы создадим реляционную базу данных North_wind сMariaDB,создадим таблицу Products, вставим значения в таблицу и посмотрим, как она выиграет индекс в столбце Unit_Price.

CREATE DATABASE IF NOT EXISTS North_wind;

USE North_wind;

CREATE TABLE IF NOT EXISTS Products(
  Product_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
  Product_Name VARCHAR(100) NOT NULL, 
  Unit_Price INT, Maker_ID INT);
INSERT INTO Products (Product_Name,Unit_Price,Maker_ID) 
VALUES('Dish rack',89,1), 
      ('2-in-1 shoe pads',5,2), ('Dishwasher',1999,3),  
      ('Echo sound speaker',79,2), ('iPhone 8',1200,4), 
      ('Apple Smart Watch',395,4), ('LG Curved 32 in TV',550,3);
DELETE FROM Products WHERE Unit_Price = 500

SELECT * FROM Products
WHERE Unit_Price BETWEEN 70 AND 80
DELETE FROM Products WHERE Unit_Price = 500

Поскольку записи индекса хранятся в отсортированном порядке, индексы также помогают при обработке предложений ORDER BY. Без индекса база данных должна загружать записи и сортировать их во время выполнения. Индекс по Unit_Price позволит базе данных обработать следующий запрос, просто сканируя индекс и извлекая строки по мере обращения к ним. Чтобы упорядочить записи в порядке убывания, база данных может просто просмотреть индекс в обратном порядке.

SELECT * FROM Products ORDER BY Unit_Price ASC

Группировка записей с помощью предложения GROUP BY часто требует сортировки, поэтому индекс Unit_Price также поможет следующему запросу подсчитать количество товаров по каждой цене.

SELECT Count(*), Unit_Price FROM Products
GROUP BY Unit_Price

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

Распространенные методы индексирования:

я. Некластеризованные: данные представлены в произвольном порядке, но логический порядок определяется индексом. Строки данных могут быть распределены по всей таблице независимо от значения индексированного столбца или выражения. Дерево некластеризованного индекса содержит ключи индекса в отсортированном порядке, при этом конечный уровень индекса содержит указатель на запись (страницу и номер строки на странице данных в механизмах с организацией страниц; смещение строк в механизмах с файловой организацией). ).

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

iii. Кластер: когда несколько баз данных и несколько таблиц объединены, это называется кластером (не путать с кластеризованным индексом, описанным выше). Записи для таблиц, совместно использующих значение кластерного ключа, должны храниться вместе в одних и тех же или соседних блоках данных. Это может улучшить объединение этих таблиц по ключу кластера, поскольку совпадающие записи хранятся вместе.

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