我很难找到为什么在表的外键上添加索引会减慢我的同事的观点。此视图由具有外连接和内连接的多个打包视图组成。我试图逐一删除它们以找出问题所在,但我不能说,它似乎不是来自特定的视图,而是来自它们的更多。
我知道索引可以减慢插入速度或者它们在硬盘驱动器上占用大小,但我从来没有读过他们可能负责放慢视图的任何地方。事实是,当我这样做时:
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
GO
select top 20 * from MyView
索引需要20秒而没有索引需要9秒。
CREATE NONCLUSTERED INDEX [IX_MyField] ON [dbo].MyTable
(
[MyField] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
答案 0 :(得分:9)
您的OTHER索引或统计信息可能已过期。如果它们不是最新的,查询分析器可能会使用您的新索引选择次优执行计划,因为它认为会更快。
尝试跑步:
UPDATE STATISTICS WITH (FULLSCAN)
在你的桌子上。
答案 1 :(得分:2)
您是否从MyTable中选择了其他任何列?如果是这样,您可能正在进行书签查询(或RID查找),这意味着您将返回表格以获取其他数据。
您应该在索引的INCLUDE
子句中放置您另外选择的任何列。
在启用执行计划的情况下运行两个查询并比较2,确定查询的哪些部分需要更长的时间。