Индексы в SQL — дополнительные структуры данных, ускоряющие поиск информации в таблицах. Они представляют собой характеристики, связанные с полями таблицы. Добавление индекса к полю (например, name) значительно ускоряет поиск по этому полю по сравнению с запросами без индексов.
Что такое индексы и зачем они нужны?
Индексы — невидимые для пользователя элементы базы данных. Их основная функция — ускорение выполнения запросов на поиск данных. Добавлять индексы к каждому полю нецелесообразно. Индексировать следует только те поля, по которым часто выполняется поиск.
Например, для сайта с системой поиска по названиям и содержимому статей индексы следует добавить к полям, содержащим названия и текст статей. Поля, по которым поиск не ведётся (дата публикации, автор, количество просмотров), индексировать не нужно.
Создание и удаление индексов
Для создания индекса для поля name в таблице people используется команда:
CREATE INDEX n_index ON people (name);
Здесь:
- CREATE INDEX — команда создания индекса;
- n_index — имя создаваемого индекса (можно выбрать любое);
- people — имя таблицы;
- name — имя поля, для которого создаётся индекс.
Для удаления индекса используется команда DROP INDEX:
DROP INDEX n_index;
Здесь n_index — имя индекса, который необходимо удалить. Указывать имя таблицы и поле не требуется, так как при удалении индекса указывается его имя. В некоторых случаях первичный ключ (PRIMARY KEY) также является индексом. После создания или удаления индекса обновление данных может потребоваться для отображения изменений в интерфейсе управления базой данных.
Эффективность индексов
Эффективность индексов наиболее заметна при работе с большими объёмами данных (сотни тысяч и более записей). В небольших таблицах разница во времени выполнения запросов с индексом и без него может быть незначительной и практически незаметной. Эксперимент с небольшой таблицей не показал существенной разницы во времени выполнения запроса до и после добавления индекса.
Практическое применение: Объединение данных из нескольких таблиц
В следующем уроке мы рассмотрим объединение данных из нескольких таблиц. Для этого создадим две таблицы, связанные между собой:
- shop: содержит информацию о товарах (id, title, price).
- orders: содержит информацию о заказах (id, shop_id, person_id, date).
Создадим таблицу shop:
CREATE TABLE shop (
id INT NOT NULL PRIMARY KEY,
title VARCHAR(255),
price INT
);
Создадим таблицу orders:
CREATE TABLE orders (
id INT NOT NULL PRIMARY KEY,
shop_id INT,
person_id INT,
date DATETIME DEFAULT CURRENT_TIMESTAMP
);
Для установления связи между таблицами, укажем внешние ключи:
ALTER TABLE orders
ADD CONSTRAINT fk_shop_id FOREIGN KEY (shop_id) REFERENCES shop(id),
ADD CONSTRAINT fk_person_id FOREIGN KEY (person_id) REFERENCES people(id);
Поля shop_id в таблице orders и person_id будут иметь внешние ключи, ссылающиеся на id в таблицах shop и people соответственно. Это позволит эффективно объединять данные из этих таблиц в последующих запросах. Эти внешние ключи также являются индексами.
Использование индексов позволяет значительно повысить производительность запросов к базе данных, особенно при работе с большими объёмами информации. Правильное проектирование и использование индексов — важный аспект оптимизации работы с базами данных SQL.