top of page

Difference between PAD_Index and FillFactor in Database Optimization

In the realm of database management, optimizing storage and performance is a critical task. Two key concepts that contribute to this optimization are PAD_Index and FillFactor. While both serve to reduce index fragmentation, they differ in their scope, mechanisms, and impact on database operations. In this article, we will explore the difference between PAD_Index and FillFactor, shedding light on their functionalities, implementation, and the benefits they offer.


PAD_Index (Page-level Assembly Descriptor Index)

PAD_Index enables or disables the page-level assembly descriptor index option during index creation or rebuild. It is used to reduce index fragmentation and improve read performance. When an index is created or rebuilt with PAD_Index enabled, it reserves extra space on each index page for future index growth. This reserved space is called an "assembly descriptor" or AD. The AD stores information about how many rows can be inserted into the index page before it becomes full.


Code Example:

-- Create an index with PAD_Index enabled

CREATE INDEX IX_Orders_OrderDate ON Orders (OrderDate) WITH (PAD_INDEX = ON);

In the above example, the IX_Orders_OrderDate index is created on the Orders table, with the OrderDate column. The PAD_INDEX = ON option enables PAD_Index for this index.


PAD_Index helps prevent index fragmentation that can occur when pages need to split to accommodate new rows. This reduces the need for frequent page splits and improves read performance by providing more contiguous space for data.


FillFactor

FillFactor is a database setting that determines the amount of space reserved on index pages when they are created or rebuilt. It represents the percentage of space that should be filled with data, leaving the remaining space as free space. The default FillFactor value is 100, which means the index pages are fully filled with data, leaving no free space.


The server-wide default FILLFACTOR is 0, which means that the leaf-level pages are filled to capacity.

PAD_Index and FillFactor

The Leaf level of a clustered index is the data itself, each leaf level entry being a row on the table.


For a non-clustered index, it is the leaf level that contains one entry per row. The entry consists of the index key columns, optional included columns, and the bookmark/pointer.


Code Example:

-- Create an index with a FillFactor of 80%

CREATE INDEX IX_Orders_OrderDate ON Orders (OrderDate) WITH (FILLFACTOR = 80);

In the above example, the IX_Orders_OrderDate index is created on the Orders table, with the OrderDate column. The FILLFACTOR = 80 option sets the FillFactor to 80%, meaning 80% of the index pages will be filled with data, leaving 20% as free space.


By setting a lower FillFactor value, such as 80, you can leave more free space on index pages. This free space helps to accommodate future data growth and reduce index fragmentation. It also allows for more efficient data modifications (inserts, updates, deletes) since there is space available for new rows on existing pages, reducing the need for page splits.


The Difference: PAD_Index and FillFactor

Factors

PAD_Index

FillFactor

Purpose

Reduces index fragmentation and improves read performance.

Reduces index fragmentation and optimizes data modification.

Scope

Page-level assembly descriptor index in SQL Server.

Database-wide setting in various database systems (e.g., SQL Server).

Mechanism

Reserves extra space (assembly descriptors) on index pages.

Determines the percentage of space reserved for data on index pages.

Usage

Applied during index creation or rebuild using the PAD_INDEX option.

Set as a database-wide setting or overridden at the index level.

Syntax

CREATE INDEX [index_name] ON [table_name] (column_name) WITH (PAD_INDEX = ON)

CREATE INDEX [index_name] ON [table_name] (column_name) WITH (FILLFACTOR = 80)

Storage

PAD_Index required high storage due to the reserved space for assembly descriptions.

Storage depends on the amount of free space allocated on index pages, potentially increase storage needs if a lower FillFactor is chosen.

Performance

Improve read performance by reducing fragmentation and providing more contiguous data on index pages.

Enhance data modification performance by reducing the need for page splits and maintaining free space for new rows.

Conclusion

PAD_Index and FillFactor are valuable tools in the database administrator's arsenal for optimizing storage and performance. While PAD_Index focuses on improving read performance by reducing index fragmentation, FillFactor optimizes data modification operations by minimizing fragmentation and providing free space for new rows. Understanding the nuances and appropriate usage of these concepts allows database administrators to tailor their optimization strategies to the specific needs of their systems, ultimately resulting in enhanced performance and efficiency.

0 comments
bottom of page