我正在努力解决特定问题。
当我过去7天只过滤时,它运行得很慢(15秒/ 33行)。
从2010年开始到现在过滤时,它的运行速度非常快(0秒/ 7071行)。
以下是查询,唯一的区别是时间戳过滤器:
Select l.linkid as [Data]
from tblsearchresult sr with (nolock)
inner join tbllink l with (nolock) on l.linkid = sr.linkid
where
sr.searchtaskid in (817) and
l.timestamp between '2015-08-04 00:00:00:000' and '2015-08-10 23:59:59:999'
Select l.linkid as [Data]
from tblsearchresult sr with (nolock)
inner join tbllink l with (nolock) on l.linkid = sr.linkid
where
sr.searchtaskid in (817) and
l.timestamp between '2010-01-01 00:00:00:000' and '2015-08-10 23:59:59:999'
我的问题是,减速的可能原因是什么?
由于
答案 0 :(得分:1)
您需要查看执行计划。如果它们是相同的,那么问题将是温缓存与冷缓存。第一次运行查询时,需要加载数据。当数据已经在内存中时,查询运行得更快。
更有可能的是,这只是一种效率低下的优化。第一个查询可能会使用tbllink(timestamp)
上的索引,但第二个查询不会使用
对于这些查询,我建议编写查询:
Select sr.linkid as [Data]
from tblsearchresult sr with (nolock) inner join
tbllink l with (nolock)
on l.linkid = sr.linkid
where sr.searchtaskid in (817) and
(l.timestamp >= '2010-01-01' and
l.timestamp < '2015-08-11'
);
(这只会更改select
的来源,并使用更清晰的日期算法。)
在tblsearchresult(searchtaskid, linkid)
和tbllink(linkid, timestamp)
上尝试查询。