Я хочу додати тут, що різні бази даних вимагають різних стратегій. Порівняємо, наприклад, MySQL w / InnoDB та PostgreSQL.
InnoDB
Таблиці InnoDB - це в основному індекс b-дерева первинного ключа, який розширюється, щоб містити інформацію про рядки у записі індексу. Сканування фізичного порядку не підтримуються, і всі сканування відбуваються в логічному порядку. Це означає дві речі:
Послідовне сканування в Innodb генерує безліч випадкових вводу / виводу диска та
Індекс первинного ключа повинен бути пройдений незалежно від того, чи використовується другий індекс.
Шукання первинних ключів у цій моделі швидше, ніж у будь-якому іншому підході.
У цьому випадку дуже важливо індексувати достатньо полів у багатосторінкових таблицях. Типовим правилом є індексувати все, за чим потрібно фільтрувати.
PostgreSQL
PostgreSQL використовує купі файли, одну таблицю на файл (у деяких таблицях може бути багато файлів), де кортежі виділяються з вільного місця цієї купи. Підтримуються сканування фізичного порядку. Щоб сканування логічного порядку працювало, необхідно додати індекс.
Первинні ключі в PostgreSQL - це, як правило, підмножина унікальних індексів, де жодне значення не може бути NULL. UNIQUE обмеження виконуються за допомогою неявних індексів, а кілька інших типів індексу підтримуються різними операціями, можливими в індексі.
Це означає:
Шукає первинний ключ, припускаючи, що досить велика таблиця вимагає отримання індексного файла та файлу таблиці. Це значно повільніше, ніж підхід MySQL, коли індекс повинен бути пройдений, а рядок міститься в індексі.
Сканування фізичного порядку виконуються набагато краще, зменшуючи випадкові введення / виведення диска, де потрібно обробити значну кількість рядків.
Сканування вторинних індексів працює краще, ніж MySQL, тому що для переходу до фізичної частини таблиці потрібно пройти лише один індекс.
У цій моделі індекси часто необхідні, але планувальник має більше свободи, коли використовувати індекс, і наслідки його використання часто є менш серйозними. Таблиці більш оптимізовані (а не спеціалізуються на пошуку файлів pkey), тому потрібно менше індексів.
TL; DR
Знайте свої RDBMS.