SQL Server의 클러스터형 인덱스: 더 빠른 쿼리를 위해 데이터가 저장되는 방법

작성자

카테고리:

← 피드로
DEV Community · Namrata Khorjuwekar · 2026-07-07 개발(SW)

Namrata Khorjuwekar

Database Deep Dive Series – Part 2

Welcome to the Database Deep Dive Series, where I explore database concepts through practical examples, SQL scripts, interview questions, and real-world scenarios.

In Part 1, we explored Heaps (Tables Without Clustered Indexes).

In this article, we’ll dive into one of the most important SQL Server concepts every DBA and developer should understand: Clustered Indexes.

What is a Clustered Index?

A Clustered Index determines how the rows of a table are physically organized on disk.

Unlike a nonclustered index, the table itself becomes the clustered index. SQL Server stores the data pages in the order of the clustered index key.

Because data can only be stored in one physical order, a table can have only one clustered index.

Think of it like a dictionary. Words are arranged alphabetically, making it easy to locate a specific word without scanning every page.

Why Are Clustered Indexes Important?

Imagine a table containing millions of employee records.

If users frequently search by EmployeeID, SQL Server can quickly navigate the clustered index to locate the required row instead of scanning the entire table.

Benefits include:

  • Faster data retrieval
  • Reduced disk I/O
  • Efficient range queries
  • Improved query performance

How Does a Clustered Index Work?

SQL Server stores clustered indexes using a B-Tree (Balanced Tree) structure.

The structure consists of:

  • Root Page – Entry point for index searches.
  • Intermediate Pages – Direct SQL Server to the correct data pages.
  • Leaf Pages – Store the actual table data.
                Root Page
                    │
          ┌─────────┴─────────┐
          │                   │
    Intermediate         Intermediate
          │                   │
      ─────────────────────────────
      │     │      │      │      │
    Data  Data   Data   Data   Data
   (Leaf)(Leaf) (Leaf) (Leaf) (Leaf)

Enter fullscreen mode Exit fullscreen mode

Unlike a nonclustered index, the leaf level of a clustered index contains the actual data rows.

Clustered Index vs Heap

Feature Heap Clustered Index Physical Order Unordered Sorted by clustered key Storage Data pages only Data stored in B-Tree Row Lookup RID (Row Identifier) Clustered Key Best Use Case Staging / ETL OLTP / Reporting

Choosing a Good Clustered Index

Choosing the clustered key is one of the most important database design decisions.

A good clustered key should be:

✅ Unique

Unique values minimize internal overhead and improve efficiency.

✅ Narrow

Since every nonclustered index stores the clustered key as a row locator, keeping the key small reduces storage and improves performance.

✅ Static

Avoid columns that change frequently.

Updating a clustered key requires SQL Server to relocate the row.

✅ Increasing

Sequential values like IDENTITY reduce page splits and fragmentation.

When Should You Use a Clustered Index?

Clustered indexes work well when:

  • Queries frequently search using the primary key.
  • Range searches are common.
  • Data needs to be returned in sorted order.
  • Large tables require efficient data retrieval.
  • OLTP workloads need fast lookups.

Example: Creating a Clustered Index

CREATE TABLE Employees
(
    EmployeeID INT PRIMARY KEY CLUSTERED,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Department VARCHAR(50)
);

Enter fullscreen mode Exit fullscreen mode

Since the primary key is clustered, SQL Server stores the table rows in EmployeeID order.

Find Clustered Indexes in Your Database

SELECT
    OBJECT_NAME(object_id) AS TableName,
    name AS IndexName
FROM sys.indexes
WHERE type = 1;

Enter fullscreen mode Exit fullscreen mode

Real-World Scenario

Suppose an e-commerce application stores 50 million customer orders.

Most queries search using:

  • OrderID
  • OrderDate
  • CustomerID

Would you create a clustered index?

Yes.

Using OrderID as the clustered key allows SQL Server to locate rows efficiently and provides a stable physical structure for the table.

SQL Server Interview Prep

What is a Clustered Index?

A clustered index determines the physical order of rows within a table. Since data can only be stored in one physical order, a table can have only one clustered index.

Why can a table have only one clustered index?

Because the table’s data rows themselves are stored according to the clustered index key.

What is stored at the leaf level of a clustered index?

The leaf level contains the actual table data.

What is the difference between a Heap and a Clustered Index?

A heap stores rows without any logical order.

A clustered table stores rows according to the clustered index key.

What makes a good clustered key?

A good clustered key should be:

  • Unique
  • Narrow
  • Static
  • Sequential

Best Practices

  • Choose a narrow clustered key.
  • Prefer integer-based keys over long strings.
  • Avoid updating clustered key values.
  • Use sequential keys whenever possible.
  • Monitor fragmentation on heavily modified tables.

Common Mistakes

❌ Using NEWID() as the clustered key, causing fragmentation.

❌ Choosing a wide clustered key.

❌ Frequently updating clustered key columns.

❌ Ignoring query patterns when selecting the clustered key.

Key Takeaways

  • A clustered index defines how data is physically stored.
  • SQL Server uses a B-Tree structure for efficient navigation.
  • The leaf level contains the actual table rows.
  • A table can have only one clustered index.
  • Choosing the right clustered key has a major impact on performance.

Discussion

What clustered key do you commonly use in production databases?

Do you always cluster on the primary key, or have you encountered scenarios where another column provided better performance?

Share your experience in the comments—I’d love to hear your thoughts.

📚 Database Deep Dive Series

Part Topic Status Part 1 SQL Server Heaps ✅ Published Part 2 Clustered Indexes ✅ Current Part 3 Nonclustered Indexes 🔜 Coming Soon Part 4 Unique Indexes 🔜 Coming Soon Part 5 Filtered Indexes 🔜 Coming Soon Part 6 Included Columns 🔜 Coming Soon Part 7 Columnstore Indexes 🔜 Coming Soon Part 8 Fill Factor 🔜 Coming Soon Part 9 Statistics 🔜 Coming Soon Part 10 Execution Plans 🔜 Coming Soon

💬 Question for the community:

Have you ever chosen a clustered index on a column other than the primary key? What factors influenced your decision?

원문에서 계속 ↗

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다