我有一个sql查询,需要很长时间才能执行,下面是sql的详细信息。
Bifunctor
我可以做些什么来优化此查询,即提高其性能?
sql结果如下:
答案 0 :(得分:0)
将tDate和SiteId的过滤器添加到生成数据的select查询中(...来自rawData,其中x和y之间的tDate和SiteId In(a,b,c)...将改善它
答案 1 :(得分:0)
从您的查询中可以看出,基表即Raw_Data
包含大量记录。如果确实如此,那么您可以尝试下面提到的步骤来优化您的方案。
tDate
的{{1}}列上有索引,此外此索引还包含Raw_Data
列(最后提到的示例查询)这个答案)SiteID, tTime, tMI
列SiteID
上的过滤器移至主查询使用主查询中的过滤器进行查询
tDate
创建包含列的索引
select *
from
( select SiteID, tDate, tTime,
(CASE WHEN IsNumeric(tMI)=1 then cast(tMI as float)
ELSE null END) AS value
from Raw_Data
where
(tDate>='20151201' and tDate<='20151205')
) src
pivot
(
max(value) for SiteID in ([CA0021], [CA0022], [CA0059])
) piv
order by tDate
另一种方法
此外,您可以采取的另一种方法是在create NONCLUSTERED index index1 on Raw_Data
(
tDate ASC
)
include ( SiteID, tTime, tMI )
中运行查询,并为SQL Server Management Studio
选中查询选项。
如果执行计划有建议创建索引(这通常以绿色字体显示),那么您应该创建推荐索引并查看是否有助于提高查询速度。我从我的经验中观察到,执行计划建议始终有效并且会带来很大的改进。