【问题标题】:Optimising Large SQL Server Tables优化大型 SQL Server 表
【发布时间】:2013-07-18 15:38:34
【问题描述】:

我有一个非常大的表,大约有 5000 万行和 15 列。每当我阅读时,我总是需要所有的列,所以我不能拆分它们。我在表上有一个带有 4 个键的聚集索引,我总是使用这些键读取数据。

但性能仍然很慢,我的查询很简单

select 
    CountryId, RetailerID, FY, 
    sum(col1), sum(col2),.....sum(col15) 
from mytable a
join product p on a.productid = p.id
join ......
join .....
join ......
join .....
Where .......
group by CountryId, RetailerID, FY

我没有在任何内联函数上使用任何IN 运算符或任何子查询...我知道这显然会使其变慢。我看过分区但不确定,我可以通过分区来提高性能吗?

或者还有什么我可以做的吗?

我使用的是 SQL Server 2012 企业版

请帮忙!

【问题讨论】:

  • 是所有约 5000 万行都定期更新还是有些历史记录不会更新?
  • 您是否尝试过查看查询计划?
  • 同意,请先看执行计划。
  • 是的,它们确实每天更新一次,但我们无法控制这一点,因为只要有数据要导入,SSIS 包就会这样做。该系统与 SAP 集成,所以我说的是大量数据。我们有 4 个这种大小的表,每个表大约有 5000 万行,当我们进行报告时,我们使用 UNION ALL 将它们全部合并。我检查了查询计划,它们似乎是我的索引,它没有向我显示“尝试使用...创建索引”的任何帮助,所以计划很好,但这只是数据的问题,要扫描的内容太多。
  • 如果查询计划报告大部分时间花在聚集索引查找上,那么它几乎是一个 IO 瓶颈。 SET STATISTICS IO ON,让我们知道这些数字是什么。此外,运行您的查询两次。看看在没有物理读取的情况下,第二次运行是否不会显着加快。

标签: sql database tsql sql-server-2012 database-partitioning


【解决方案1】:

谢谢大家,我已经使用聚合表完成了这项工作。我在一夜之间运行一项工作来聚合数据,这限制了行数,并且报告现在运行良好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2010-09-11
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    相关资源
    最近更新 更多