【发布时间】:2018-04-03 17:16:16
【问题描述】:
我有一个在PFX,EFF_DT,TERM_DT 上有非聚集索引的表。执行计划显示 RID LookUp 堆成本为 99%,而不是索引扫描。我想知道不索引扫描不在执行计划中的原因,RID LookUp 是个好方法。
SELECT DISTINCT
ID
,PFX
,EFF_DT
,ID1
,TERM_DT
,RULE
,EXP_CAT
,ACCT_CAT
,OPTS
,RULE_ALT
,RULE_ALT_COND
FROM TempMaster
WHERE PFX = 'I004'
ORDER BY EFF_DT DESC
【问题讨论】:
-
虽然我只使用包含在索引中的列,但索引查找成本约为 80%。
-
尝试在表名后使用 (WITH (INDEX(your_index_name))) ,查看执行计划
-
执行计划相同,索引查找 - 0% 和 RID 查找 - 99%
-
您的表没有聚集索引是否有原因?看起来
PFX, EFF_DT会是一个不错的候选人。 -
它有数十亿条记录,而且它有非唯一值,数据经常插入其中。对于非唯一数据,它不会产生性能问题。
标签: sql sql-server sql-server-2008 optimization query-optimization