我有了的SQL Server查詢性能問題
- 非唯一ID列的表 各種數據
的
我有一個查詢,給定一個日期範圍,它獲取在該日期範圍內更新的條目列表以及它剛剛找到的最後一個更新之前的條目列表。通常日期範圍在一天之內,因此07-10-2013 00:00:000 - 7-11-2013 00:00:000。
例如。鑑於2013年7月10日00:00:000 - 2013年7月11日00:00:000,查詢結果2項
id new data updatedate old data last updatedate
3 randomdata 7-10-2013 03:30:343 randomdata 7-05-2013 06:34:764
4 randomdata 7-10-2013 13:30:343 randomdata 6-09-2013 04:37:376
這是結果,我想獲得。目前,我已經有了一個查詢,但是查詢速度很慢,因爲表中有3個內部聯接,這些聯接有很多條目,我想知道是否有人可以想出一種更快的查詢方式。使用SQL Server 2000
表信息
- 非唯一ID
- 唯一的ID(這僅僅是一個自動遞增ID)
- 將收集的各種數據
- 更新日期
編輯:
我ndexes目前都在id
和updatedate
查詢我目前使用(概括的話)::警告::這不是漂亮::警告::
select *
from
(select distinct
s1.id as id,
s1.randData1, s2.randData1, s1.randData2, s2.randData2,...,
s1.updatedate as newupdatedate,
s2.updatedate as prevupdatedate,
datediff(second, s1.updatedate ,s2.updatedate) as maxdate
from
(select *
from updates
where updatedate >= '{0}' and updatedate < '{1}'
and id in ('{3}')) as s1
inner join
updates s2 on s1.id = s2.id and s1.updateid != s2.updateid) as t1
inner join
(select
s1.id, max(datediff(second, s1.updatedate, s2.updatedate)) as maxdate2
from updates s1
inner join updates s2 on s1.id in ('{3}') and s1.id = s2.id and s1.updateid != s2.updateid
where datediff(second, s1.updatedate, s2.updatedate) < 0
and s1.updatedate < '{1}' and s2.updatedate < '{1}'
group by
s1.id) as t2 on t1.id = t2.id and t1.maxdate = t2.maxdate2
{0 } {1}和{2}是傳入的參數。
編輯:如果有什麼區別,查詢正在C#中執行。如有必要,2個查詢也會很好。我最終尋找的是在所選日期的數據中發生了什麼變化。
你能發佈查詢,並告訴我們在什麼地方指標? –