Clustered Index
-
Definition: A clustered index determines the physical order of data in the table. The table rows are stored in the order of the index.
-
Physical Sorting: The data rows are physically rearranged to match the order of the clustered index.
-
One per Table: A table can have only one clustered index because the data can only be physically sorted in one way.
-
Efficient for Range Queries: Since the data is sorted, range queries (e.g.,
BETWEEN,<,>) are faster. -
Example:
CREATE CLUSTERED INDEX idx_emp_id ON employee(emp_id);In this case, the table rows will be sorted by
emp_id.
Non-Clustered Index
-
Definition: A non-clustered index is a separate structure from the table. It stores a copy of the indexed column(s) along with a pointer to the actual table rows.
-
Logical Sorting: The table data is not physically reordered; the index maintains a logical order of the values.
-
Multiple per Table: A table can have multiple non-clustered indexes, each optimized for different queries.
-
Uses More Storage: Requires additional storage for the index structure.
-
Example:
CREATE NONCLUSTERED INDEX idx_emp_name ON employee(emp_name);This creates an index for
emp_name, but the table’s physical order remains unchanged.
CLUSTERED INDEX
NON-CLUSTERED INDEX
A clustered index is faster.
A non-clustered index is slower.
The clustered index requires less memory for
operations. No additional storage (apart from
metadata).
A non-Clustered index requires more memory for
operations.
In a clustered index, the clustered index is the main
data.
In the Non-Clustered index, the index is the copy of
data.
A table can have only one clustered index.
A table can have multiple non-clustered indexes.
The clustered index has the inherent ability to store data on
the disk.
A non-Clustered index does not have the inherent ability to
store data on the disk.
Rearranges rows to match index order.
Does not affect the table's physical order.
No pointers, as data is part of the index itself.
Includes pointers to the actual data rows.
Primary Keys of the table by default are clustered
indexes.
The composite key when used with unique constraints of the table act as the
non-clustered index.
Use for columns that are frequently used for sorting, range
queries, or primary lookups (e.g., id,
date).
Use for columns frequently queried with WHERE,
JOIN, or ORDER BY that do not determine
the physical order of the data.
| CLUSTERED INDEX | NON-CLUSTERED INDEX |
|---|---|
| A clustered index is faster. | A non-clustered index is slower. |
| The clustered index requires less memory for operations. No additional storage (apart from metadata). | A non-Clustered index requires more memory for operations. |
| In a clustered index, the clustered index is the main data. | In the Non-Clustered index, the index is the copy of data. |
| A table can have only one clustered index. | A table can have multiple non-clustered indexes. |
| The clustered index has the inherent ability to store data on the disk. | A non-Clustered index does not have the inherent ability to store data on the disk. |
| Rearranges rows to match index order. | Does not affect the table's physical order. |
| No pointers, as data is part of the index itself. | Includes pointers to the actual data rows. |
| Primary Keys of the table by default are clustered indexes. | The composite key when used with unique constraints of the table act as the non-clustered index. |
Use for columns that are frequently used for sorting, range
queries, or primary lookups (e.g., id,
date).
|
Use for columns frequently queried with WHERE,
JOIN, or ORDER BY that do not determine
the physical order of the data.
|
Both indexes can complement each other to optimize query performance.
Post a Comment