我在 DTA 中分析了一个巨大的查询。数据库设计得很糟糕,表上没有主键,也没有聚集索引。我发现大约有 80 张这样的桌子。现在,如果没有索引,查询显然会运行缓慢,但是当我将它们放入 DTA 时,它总是要求我创建一个非聚集索引(即使在堆上)。就像是
CREATE NONCLUSTERED INDEX [_dta_index_IO_Status_MAster_10_1899153811__K2_4_5_1912]
ON [Scorecard].[IO_Status_MAster]
(
[WBS] ASC
)
INCLUDE ([OrderNumber], [IO_STATUS])
WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go
我的问题是,DTA 的工作前提是表上有聚集索引吗?为什么不建议创建聚簇索引?
默认情况下,DTA 不推荐聚簇索引。此外,查看文档以了解更多它没有做的事情。
如果您确实需要聚簇索引的建议,请单击“不保留任何现有 PDS”单选按钮,如下面的屏幕截图所示:
但请注意,它会产生一些非常糟糕的聚簇索引建议。DTA 不能替代有关如何存储数据的基本数据建模。
通常,您的聚簇索引应遵循 SUN-E 方法: