【问题标题】:Slow query using sum in SQL Server在 SQL Server 中使用 sum 进行慢速查询
【发布时间】:2015-05-08 03:00:35
【问题描述】:

我在 SQL Server 2014 中有一个表,其中包含超过 1500 万行和 49 列。像这样的简单查询需要大约 20 秒才能运行。有没有其他微调的方法? Date_runskid 都是非聚集索引。

select skid, sum(price)
from stocktrack
where date_run >='2013-2-21'
  and date_run <='2013-3-21'
group by skid

【问题讨论】:

  • skid 和 price 是否包含在 date_run 索引的索引中?如果你离开组,它会快多少?可以发一下执行计划吗?
  • 这类查询非常慢,因为它只能在两个子句之一上使用 date_run 上的索引。如果出现问题,此索引扫描可能仍会返回表的所有行。在 Oracle 上,您可以强制执行“INDEX_ASC”扫描,但我不知道是否有 sqlserver 的等效项。
  • @MartinDrautzburg 他们在 MSSQL Sever 上被称为 HINTS
  • 如果我错了,有人可以纠正我,但理想的索引应该是 date_run,包括skid 和 price。如果您没有该索引并且可以构建和测试它,那可能会给您一个快速的答案。
  • 向我们展示您的表是如何定义的以及您在其上拥有哪些索引。

标签: sql sql-server performance


【解决方案1】:

也许您可以通过在 [date_run] 列上对表进行分区来减少要扫描的数据量。这取决于列中的数据变化。您应该在检查行为之前和之后获取执行计划。

【讨论】:

  • 谢谢大家。我将尝试分区方法。与此同时,我也发现了这个很酷的东西。查询在 1 秒内完成 ... select skid, sum(price) from stocktrack WITH (NOLOCK) where date_run >='2013-2-21' and date_run
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
相关资源
最近更新 更多