База Hintsage

Индексы и производительность

Индексы, планы выполнения, статистика и оптимизация SQL-запросов.

Практика

Вопросы: Индексы и производительность

В продакшене один параметризованный запрос быстро обрабатывает редких клиентов, но резко замедляется для клиента с большим объёмом данных; после очистки кэша результат меняется. Какой механизм объясняет такую нестабильность?

Разберите ситуацию: запрос возвращает немного строк, но сортировка результата занимает заметное время. Как индекс может устранить отдельную операцию сортировки?

Программирование SQLИндексы и производительностьРазработчик серверной части, отвечающий за SQL и производительность базы данных

В SQL Server запрос к индексируемому столбцу неожиданно получает план со сканированием. Объясните механизм на примере несовпадения типов параметра и столбца:

CREATE TABLE dbo.Clients (
    ClientCode varchar(20) NOT NULL,
    Name       varchar(100) NOT NULL
);

CREATE INDEX IX_Clients_ClientCode
    ON dbo.Clients (ClientCode);

DECLARE @code nvarchar(20) = N'ABC123';

SELECT Name
FROM dbo.Clients
WHERE ClientCode = @code;

В PostgreSQL нужно быстро получать первые 20 оплаченных заказов. План выбирает индекс по дате, хотя условие по статусу отбрасывает большинство строк. Объясните механизм, из-за которого LIMIT может сделать такой план предпочтительным.

CREATE TABLE orders (
    id         bigint PRIMARY KEY,
    status     text NOT NULL,
    created_at timestamp NOT NULL
);

CREATE INDEX ix_orders_created_at ON orders (created_at DESC);
CREATE INDEX ix_orders_status ON orders (status);

EXPLAIN
SELECT id, created_at
FROM orders
WHERE status = 'paid'
ORDER BY created_at DESC
LIMIT 20;

Показано 1–20 из 50