Индексация — это метод ускорения поиска строк в таблице. Индексы создаются на столбцах, которые часто используются в условиях WHERE
, JOIN
, ORDER BY
.
Как работает индексация внутри PostgreSQL?
На изображении показано, как индексы существуют в отдельной с структуре данных и и отсылают к значениям основной таблицы.
Создание индекса
-- Создание индекса при создании таблицы
CREATE TABLE sales_data (
order_id SERIAL PRIMARY KEY,
customer_id INT,
amount DECIMAL(10, 2),
order_date DATE,
order_quartal DATE,
INDEX idx_customer_id (customer_id)
);
Выбор столбцов для индексации
Столбцы для индексации должны выбираться исходя из логики, по какому принципу вы будете соединять и фильтровать данные.
Обычно это какие-то id и дата, так как по ним чаще всего происходит соединение.
Типы индексов в PostgreSQL
Алгоритмы индексации можно использовать
Можно сказать, что B-tree и Hash - алгоритмы, которые вам понадобятся. B-tree - более универсальный, Hash - очень эффективный при соединениях с равенством. Остальные используются для
Использование индексов в запросе
SELECT
c.customer_id,
c.customer_name,
SUM(s.amount) AS total_sales
FROM
sales_data s
JOIN
customers c ON s.customer_id = c.customer_id
GROUP BY
c.customer_id,
c.customer_name
customer_id
это индекс, JOIN
работает быстрее
Индексация — это тоже must have для ускорения запросов :)