提高查询性能?

时间:2018-03-11 05:51:10

标签: sql sql-server

我是SQL的新手。我在SQL Server Express中有一个工作查询,大约需要11秒才能得到结果。我想提高查询性能,我不知道如何更快地进行查询。

我的测试数据库如

dt                       val1
---------              ---------------
2018-01-01 00:00:00     1
2018-01-01 00:01:00     2
2018-01-01 00:02:00     3
so on

我只是试着在一段时间内获得每日净值。

我的查询是

Select 
    convert(varchar(25), a.dt, 120), (b.val1 - a.val1) as val1 
From 
    testing.dbo.t1 as a, 
    testing.dbo.t1 as b 
where 
    a.dt Between '2018-02-01 00:00:00' and '2018-03-01 00:00:59' 
    and b.dt Between '2018-02-01 00:00:00' and '2018-03-01 00:00:59' 
    and convert(varchar(16), b.dt, 120) = dateadd(day, 1, convert(varchar(16), a.dt, 120)) 
    and convert(varchar(16), a.dt, 120) = dateadd(day, -1, convert(varchar(16), b.dt, 120)) 
    and FORMAT(cast(a.dt as time), N'hh\\:mm') = '00:00' 
    and FORMAT(cast(b.dt as time), N'hh\\:mm') = '00:00' 
order by 
    a.dt

2 个答案:

答案 0 :(得分:2)

正如@jhpratt所说的那样comment,给出一个直接答案是一项有点困难的任务,但我会建议你提出一个可以交叉验证的提高查询性能,

  1. 我能够看到您通过查询获取1个月的数据。表中是否包含更多数据,如果是,请确保对WHERE子句中可用的列(dt)进行了正确的索引。
  2. 在11秒内获取数据也不是那么多延迟,并且根据具体要求,您可以微调查询以避免不必要的格式化和转换,这可能会降低执行速度。

答案 1 :(得分:2)

阅读完您的评论后,这是您正在寻找的内容

select dt, val1, val1 - lag(val1) over (order by dt) from MY_TABLE
where cast(dt as time) = '00:00:00.000'