在我的案例中使用 SQL Server 2012 进行查询调优的可能性
Possibilities of Query tuning in my case using SQL Server 2012
我有 2 个表,分别是 Sales
和 SalesDetails
; SalesDetails
有 9000 万行。
当我要检索1年的所有记录时,几乎需要15分钟,而且还没有完成。
我尝试检索记录 1 个月,花了 1 分 20 秒 returns 大约 250 万条记录。我知道它很大。
有什么解决方案可以减少执行时间吗?
备注
我不想创建任何索引,因为它默认已经有足够的索引
我不知道你说你有索引是什么意思 "by default." 据我所知,创建上面显示的两个 table 默认情况下不会创建任何索引(除了聚集索引)。
话虽如此,您的查询很难优化,因为您要进行汇总和求和。这种行为通常需要接触每条记录,因此索引可能不可用。但是,我们仍然可以使用类似这样的方法来加速连接:
CREATE INDEX idx ON sales (ID, Invoice) INCLUDE (Date, Register, Customer)
假设 SQL 服务器选择使用这个索引,它可以扫描 salesDetails
然后根据这个索引快速查找每条记录(而不是 sales
table 本身) 完成连接。请注意,索引涵盖了 select 语句所需的所有列。
我有 2 个表,分别是 Sales
和 SalesDetails
; SalesDetails
有 9000 万行。
当我要检索1年的所有记录时,几乎需要15分钟,而且还没有完成。
我尝试检索记录 1 个月,花了 1 分 20 秒 returns 大约 250 万条记录。我知道它很大。
有什么解决方案可以减少执行时间吗?
备注
我不想创建任何索引,因为它默认已经有足够的索引
我不知道你说你有索引是什么意思 "by default." 据我所知,创建上面显示的两个 table 默认情况下不会创建任何索引(除了聚集索引)。
话虽如此,您的查询很难优化,因为您要进行汇总和求和。这种行为通常需要接触每条记录,因此索引可能不可用。但是,我们仍然可以使用类似这样的方法来加速连接:
CREATE INDEX idx ON sales (ID, Invoice) INCLUDE (Date, Register, Customer)
假设 SQL 服务器选择使用这个索引,它可以扫描 salesDetails
然后根据这个索引快速查找每条记录(而不是 sales
table 本身) 完成连接。请注意,索引涵盖了 select 语句所需的所有列。