Всегда ли первичный ключ (PRIMARY KEY) в реляционной БД автоматически индексируется?

«Всегда ли первичный ключ (PRIMARY KEY) в реляционной БД автоматически индексируется?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, в подавляющем большинстве современных реляционных СУБД создание ограничения первичного ключа автоматически приводит к созданию уникального индекса. Это необходимо для:

  1. Обеспечения уникальности: Индекс позволяет эффективно проверять новые значения на отсутствие дубликатов.
  2. Обеспечения быстрого доступа: Поиск, обновление или удаление записи по первичному ключу выполняется быстро.
  3. Оптимизации связей (JOIN): Внешние ключи других таблиц ссылаются на проиндексированное значение.

Пример (SQL):

CREATE TABLE employees (
    id INT PRIMARY KEY, -- СУБД автоматически создаст уникальный индекс (чаще всего кластерный)
    name VARCHAR(100)
);

Важные уточнения:

  • Тип индекса: Обычно это B-дерево (B+ tree). В некоторых СУБД (например, MySQL с InnoDB) первичный ключ является кластерным индексом — данные таблицы физически упорядочены по нему.
  • Исключения: Некоторые специализированные или устаревшие СУБД могут не создавать индекс автоматически, но это крайняя редкость. В NoSQL БД (например, MongoDB) поле _id также индексируется по умолчанию.