索引如何减慢select语句的速度?

时间:2011-09-09 13:24:28

标签: sql sql-server performance indexing

我很难找到为什么在表的外键上添加索引会减慢我的同事的观点。此视图由具有外连接和内连接的多个打包视图组成。我试图逐一删除它们以找出问题所在,但我不能说,它似乎不是来自特定的视图,而是来自它们的更多。

我知道索引可以减慢插入速度或者它们在硬盘驱动器上占用大小,但我从来没有读过他们可能负责放慢视图的任何地方。事实是,当我这样做时:

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]

2 个答案:

答案 0 :(得分:9)

您的OTHER索引或统计信息可能已过期。如果它们不是最新的,查询分析器可能会使用您的新索引选择次优执行计划,因为它认为会更快。

尝试跑步:

UPDATE STATISTICS WITH (FULLSCAN)

在你的桌子上。

答案 1 :(得分:2)

您是否从MyTable中选择了其他任何列?如果是这样,您可能正在进行书签查询(或RID查找),这意味着您将返回表格以获取其他数据。

您应该在索引的INCLUDE子句中放置您另外选择的任何列。

在启用执行计划的情况下运行两个查询并比较2,确定查询的哪些部分需要更长的时间。