【发布时间】:2012-11-19 08:52:21
【问题描述】:
我使用SQL Server 并希望为每个索引分配适当的填充因子值。我知道每个索引的以下参数:
- 每个表的行数
- 每个索引发生的扫描量
- 每个索引发生的搜索量
- 每个索引发生的查找量。
- 每个索引发生的更新量。
我知道扫描、查找和查找会将填充因子值提高到 100 并将填充因子更新为 0。但我会根据每个表的上述参数寻找一个计算适当填充因子选项的公式。
编辑
我使用下面的脚本来获取上面的参数:
select SCHEMA_NAME(B.schema_id)+'.'+B.name+' \ '+C.name AS IndexName,
A.user_scans,
A.user_seeks,
A.user_lookups,
A.user_updates,
D.rowcnt,
C.fill_factor
from sys.dm_db_index_usage_stats A
INNER JOIN sys.objects B ON A.object_id = B.object_id
INNER JOIN sys.indexes C ON C.object_id = B.object_id AND C.index_id = A.index_id
INNER JOIN sys.sysindexes D ON D.id = B.object_id AND D.indid = A.index_id
编辑 2 我使用以下参考来获得填充因子选项的最佳值:
【问题讨论】:
-
是什么让您认为需要更改默认填充因子才能开始?你发现了什么问题,你做了什么测量?
-
填充因子值对性能有直接影响。我想分配适当的填充因子值以获得更好的性能。
-
您没有回答问题。你测量了什么?你怎么知道你有错误的填充因子? 如果我告诉您使用完整的 42 因子,您将如何衡量影响?。你在追逐红鲱鱼。
-
@Remus Rusanu:请看我的编辑。
-
取决于索引的碎片化程度以及您能够安排索引维护的频率。看看 Paul Randal 关于索引碎片的 MCM 视频。
标签: sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012