SQL Server查询速度慢,时间跨度小,速度快,时间长

时间:2015-08-10 12:03:09

标签: sql sql-server database-performance

我正在努力解决特定问题。

当我过去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'

我的问题是,减速的可能原因是什么?

由于

1 个答案:

答案 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)上尝试查询。