【问题标题】:SQL STORE PROCEDURE OPTIMIZATIONSQL 存储过程优化
【发布时间】: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


【解决方案1】:

我想知道不索引扫描不在执行计划中的原因

SQLSERVER 是一个基于成本的优化器,它会尝试在合理的时间内选择一个好的计划..

RID LookUp 是个好方法

RID 查找并不总是一个好方法,因为 RID 查找是随机搜索,它们会影响 IO 活动。

如果这个查询每天执行一次,我不会担心。如果这个查询更频繁,我会通过在非聚集索引中包含这些列来避免消除循环

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2018-02-06
  • 2021-04-17
相关资源
最近更新 更多