SQL индексы: ускорьте запросы в базах данных

Индексы в 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.

Что будем искать? Например,программа