~/VibeHandbook
PDF бесплатно

Глава 14 · 05

Индексирование

Индекс — это как предметный указатель в конце книги: он позволяет базе данных сразу перейти к совпадающим строкам вместо сканирования каждой. Без индексов запросы становятся медленнее по мере роста данных — нормально на 100 строках, мучительно на 1 000 000.

Без индекса база данных проверяет каждую строку по очереди; с индексом она прыгает прямо к совпадениям — так же, как предметный указатель в книге отправляет вас на нужную страницу, а не заставляет читать от корки до корки:

  NO INDEX  (Seq Scan)              WITH INDEX  (Index Scan)
  читать КАЖДУЮ row подряд          прыжок прямо к совпадениям
  ┌─────────────────────┐          ┌─────────────┐
  │ row 1   ✗           │          │   INDEX     │
  │ row 2   ✗           │          │ author_id   │
  │ row 3   ✓  совп.     │  ◀──────┐ │   ──┬──     │
  │ row 4   ✗           │         │ └─────┼───────┘
  │ ...     (1,000,000) │         │       ▼
  │ row N   ✓  совп.     │         └──▶ rows 3, 998   ✓
  └─────────────────────┘          пара переходов, а не миллион

Практическое руководство:

  • Индексируйте столбцы, по которым вы часто фильтруете или соединяете (например, author_id, email).
  • Первичные ключи индексируются автоматически.
  • Не индексируйте всё подряд — каждый индекс ускоряет чтение, но замедляет запись и занимает место.
  • Добавляйте индексы, когда видите медленный запрос, а не превентивно для каждого столбца.

Честный способ выяснить, помогает ли индекс, — спросить базу данных, а не гадать. У каждого SQL-движка есть EXPLAIN (в Postgres — EXPLAIN ANALYZE), который показывает план, который он применит:

EXPLAIN ANALYZE
SELECT * FROM posts WHERE author_id = '...';

Если на большой таблице вывод говорит Seq Scan, база данных читает каждую строку — признак того, что индекс помог бы. После его добавления он должен переключиться на Index Scan. Это отличная задача, чтобы передать AI: вставьте медленный запрос и вывод EXPLAIN и спросите, какой индекс добавить и почему. Вы сохраняете контроль, понимая ответ, а не заучивая теорию индексов.

Хотите офлайн-версию?

Скачайте всю книгу в PDF или EPUB — бесплатно.