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

Что хранит в себе кластерный индекс?

2.2 Middle🔥 201 комментариев
#Docker, Kubernetes и DevOps#JVM и управление памятью

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

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

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

Кластерный индекс в базах данных

Кластерный индекс — это специальный индекс, который определяет физический порядок хранения строк в таблице базы данных. В SQL Server и большинстве современных СУБД может быть только один кластерный индекс на таблицу.

Что хранит кластерный индекс

Кластерный индекс хранит в себе:

  1. Ключевые значения — значения колонок, по которым построен индекс
  2. Данные строк — на листовом уровне кластерного индекса хранятся все столбцы таблицы (полная строка)
  3. Указатели на блоки данных — внутренние узлы индекса содержат ссылки на блоки данных

Пример

Представим таблицу сотрудников с кластерным индексом по EmployeeID:

Таблица Employees:
EmployeeID | FirstName | LastName | Salary
1          | John      | Doe      | 50000
3          | Jane      | Smith    | 60000
5          | Bob       | Johnson  | 55000

Кластерный индекс будет выглядеть так:

Кластерный Индекс (по EmployeeID):
Листовой уровень:
1 -> [John, Doe, 50000]
3 -> [Jane, Smith, 60000]
5 -> [Bob, Johnson, 55000]

Данные отсортированы физически в порядке EmployeeID.

Структура кластерного индекса

Кластерный индекс имеет иерархическую B-tree структуру:

         Root Node (корень)
              |
      +-------+-------+
      |               |
   Branch Node    Branch Node
      |               |
   +--+--+         +--+--+
   |  |  |         |  |  |
  Leaf Leaf      Leaf Leaf
  
Листовые узлы содержат:
- Ключ индекса (EmployeeID)
- Все столбцы таблицы

Отличие от некластерного индекса

Кластерный индекс:

  • Хранит полные данные строк на листовом уровне
  • Определяет физический порядок хранения
  • Может быть только один
  • Быстрее для поиска по диапазону значений

Некластерный индекс:

  • На листовом уровне хранит только ключевые значения и указатель на кластерный индекс (RID)
  • Не влияет на физический порядок хранения
  • Может быть до 999 штук на таблицу
  • Требует дополнительного поиска для получения всех данных

Практический пример в Java

Если ты работаешь с JPA/Hibernate, кластерный индекс обычно создается на первичном ключу:

@Entity
@Table(name = "employees", indexes = {
    @Index(name = "idx_salary", columnList = "salary")
})
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long employeeId;  // Кластерный индекс создается здесь
    
    private String firstName;
    private String lastName;
    private BigDecimal salary;
}

Важные моменты

  • Кластерный индекс влияет на производительность вставки и обновления данных, так как меняется физический порядок
  • Выбор правильного столбца для кластерного индекса критичен для производительности
  • Обычно кластерный индекс создается на первичном ключу (PRIMARY KEY)
  • Поиск по кластерному индексу обычно быстрее, чем сканирование таблицы полностью

В заключение, кластерный индекс — это мощный инструмент оптимизации, хранящий физическое расположение и полные данные строк таблицы.

Что хранит в себе кластерный индекс? | PrepBro