← Назад к вопросам

В каких случаях индекс весит больше чем сама таблица

3.0 Senior🔥 51 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Когда индекс тяжелее таблицы

Кейсы, когда индекс может быть больше самой таблицы

1. Covering Index (индекс покрывает запрос)

Если таблица содержит только primary key, а индекс содержит все колонки для запроса:

CREATE INDEX idx_user ON users(user_id, email, name, phone);

Индекс включает данные всех колонок, поэтому может занимать больше места, чем сама таблица с одним первичным ключом.

2. Много комбинированных индексов

Если таблица маленькая (100 строк), но на ней много индексов:

CREATE INDEX idx1 ON users(email);
CREATE INDEX idx2 ON users(name);
CREATE INDEX idx3 ON users(phone);
CREATE INDEX idx4 ON users(created_at);

Вместе все индексы могут весить больше, чем данные таблицы.

3. BLOB или TEXT колонки частично индексируются

CREATE FULLTEXT INDEX idx_description ON products(description);

Фуллтекстовый индекс может быть очень большим.

4. Таблица очень узкая, но много индексов

Таблица с несколькими INT и BIGINT колонками, но 10+ индексов.

Реальный пример из практики

В проекте была таблица с 50000 записей:

  • Таблица: 5 MB
  • Primary Key индекс: 0.5 MB
  • 8 дополнительных индексов: 12 MB
  • Итого индексов: 12.5 MB > 5 MB таблицы

Как это проверить

PostgreSQL:

SELECT 
    schemaname,
    tablename,
    pg_size_pretty(pg_total_relation_size(schemaname||.||tablename)) as size
FROM pg_tables
WHERE schemaname NOT IN (pg_catalog, information_schema)
ORDER BY pg_total_relation_size(schemaname||.||tablename) DESC;

MySQL:

SELECT 
    TABLE_NAME,
    ROUND(((data_length + index_length) / 1024 / 1024), 2) AS size_mb
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = database_name;

Что с этим делать

  • Удалять неиспользуемые индексы
  • Использовать селективные индексы (WHERE условия)
  • Комбинировать колонки в составных индексах
  • Регулярно анализировать индексы инструментами вроде pg_stat_user_indexes
В каких случаях индекс весит больше чем сама таблица | PrepBro