【问题标题】:query Time optimization in sqlsql中的查询时间优化
【发布时间】:2017-08-09 22:44:21
【问题描述】:

我使用以下查询:

   select 
    MAX(CASE WHEN hrm.vwPayPersCostCenter.ElmntRef = 21 THEN CAST(hrm.vwPayPersCostCenter.val AS INT) END) AS NEWS,
 MAX(CASE WHEN hrm.vwPayPersCostCenter.ElmntRef = 4 THEN CAST(hrm.vwPayPersCostCenter.val AS INT) END) AS NEWS2,
 MAX(CASE WHEN hrm.vwPayPersCostCenter.ElmntRef = 120 THEN CAST(hrm.vwPayPersCostCenter.val AS INT) END) AS NEWS3
    FROM hrm.vwPayPersCostCenter

但是它的执行时间很长(3分钟)

【问题讨论】:

  • 添加数据库标签
  • @GurV 对不起,这是个错误。
  • 你有val的索引吗?
  • @GeneR 没有

标签: sql performance sql-server-2008


【解决方案1】:

2 提高性能的事情。

  1. 使用 WHERE 子句进行过滤
  2. ElmntRef 上使用分组,然后使用MAX hrm.vwPayPersCostCenter.val。如果您在最大值之外进行强制转换,确实会更好,但我不确定这是什么类型的数据。

在查询之外,请确保您在 ElmntRef 上具有索引 INCLUDEs 列 hrm.vwPayPersCostCenter.val。因为您正在转换类型,所以它是索引的实际部分还是只是包含的列可能并不重要,但这又取决于该列的当前数据类型。

CREATE NONCLUSTERED INDEX [IX_PayPersCostCenter_ElmntRef] 
  ON hrm.vwPayPersCostCenter(ElmntRef ASC) INCLUDE(val)

这将产生 3 行而不是 3 个额外的列,如果您将其与当前输出进行比较,基本上会旋转结果。

SELECT hrm.vwPayPersCostCenter.ElmntRef, 
    MAX(CAST(hrm.vwPayPersCostCenter.val AS INT)) AS News
FROM hrm.vwPayPersCostCenter
WHERE hrm.vwPayPersCostCenter.ElmntRef IN (21, 4, 120)
GROUP BY hrm.vwPayPersCostCenter.ElmntRef

【讨论】:

    【解决方案2】:

    将条件放在where子句中,加快查询速度:

    select MAX(case when ElmntRef = 21 then CAST(val as int) end) as NEWS,
        MAX(case when ElmntRef = 4 then CAST(val as int) end) as NEWS2,
        MAX(case when ElmntRef = 120 then CAST(val as int) end) as NEWS3
    from hrm.vwPayPersCostCenter
    where ElmntRef in (4, 21, 120);
    

    where 可以加快行查找过程,如果有要使用的索引,并且聚合只在 ElmntRef 4、21、120 的行上执行,而不是在原始情况下发生的所有行。

    如果您在 ElmntRef 和 val 上有索引,查询会执行得更好

    create index idx_PayPersCostCenter on hrm.vwPayPersCostCenter(ElmntRef, val);
    

    【讨论】:

    • @Mahdi - 更新了答案。
    • :我在何时何地使用??
    • @MahdiBagheri - 是的。更新了回答的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多