Вопрос проверяет понимание компромиссов при использовании индексов в базах данных, а именно, как они влияют на производительность операций вставки.
Индексы в базах данных — это структуры данных, подобные оглавлению в книге, которые позволяют быстро находить строки по значениям определённых столбцов. Однако это удобство для операций чтения (SELECT) имеет свою цену при операциях записи (INSERT, UPDATE, DELETE).
Рассмотрим таблицу users с индексами на id (первичный ключ), email (уникальный) и country_id (неуникальный).
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(100),
country_id INT
);
CREATE INDEX idx_users_country ON users(country_id);При вставке одной строки INSERT INTO users (email, name, country_id) VALUES ('test@example.com', 'Alice', 1) СУБД выполнит примерно следующие шаги:
id (добавить новый ключ).email (проверить уникальность и добавить ключ).country_id (добавить ключ).Таким образом, одна логическая вставка превращается в несколько физических операций записи.
Индексы следует создавать обдуманно, особенно на таблицах с интенсивной записью (OLTP). Каждый дополнительный индекс увеличивает стоимость операций вставки и обновления. Рекомендуется индексировать только те столбцы, которые часто используются в условиях WHERE, JOIN или ORDER BY, и периодически пересматривать набор индексов, удаляя неиспользуемые.