为什么创建非聚集索引会减慢数据检索的速度?

时间:2018-09-26 10:42:38

标签: sql-server indexing clustered-index non-clustered-index

我的理解是索引可以提高数据检索速度。

这次有点困惑,想寻求一些建议。我有一个包含数百万条记录的表。使用select查询和where子句获取数据大约需要90秒钟-例如:

SELECT EMPID, FNAME, LNAME, ADDRESS, PHONE
FROM TBLEMPLOYEES
WHERE LNAME='ABBA'

当我在此列(LNAME)上创建非聚集索引,然后运行相同的select语句时,首次执行查询需要300秒。在随后的运行中,大约需要10秒钟。我相信第二次执行时的这种改进是由于缓存的概念?

当我重新运行相同的select语句,但是这次使用不同的搜索关键字-示例:

SELECT EMPID, FNAME, LNAME, ADDRESS, PHONE
FROM TBLEMPLOYEES
WHERE LNAME='FERNS'

再次查询大约需要300秒。下次我执行相同的查询时,大约需要10秒钟。

那么,是否可以保证索引的好处?还是仅在随后执行相应查询时才适用?对于为什么只有随后执行查询才能快速检索数据的问题,这里有些困惑。

1 个答案:

答案 0 :(得分:2)

我怀疑您创建的索引仅在LNAME

CREATE INDEX IX_LNAME ON TBLEMPLOYEES (LNAME)

如果您创建的索引包含或覆盖SELECT中的列,就像这样

CREATE INDEX IX_LNAME ON TBLEMPLOYEES (LNAME) INCLUDE (EMPID, FNAME, ADDRESS, PHONE)