我是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
答案 0 :(得分:2)
正如@jhpratt所说的那样comment,给出一个直接答案是一项有点困难的任务,但我会建议你提出一个可以交叉验证的提高查询性能,
在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'