在同一个表中选择不同记录时的速度差异

时间:2015-12-10 19:56:54

标签: sql tsql sql-server-2005

我有一个非常基本的SQL查询,它成为我处理的瓶颈。它正在选择一个大的varchar(999)列,它会减慢它的速度。从选择中删除该列会大大加快它的速度,因此我知道该列导致了问题。

我正在尝试将它分解成更小的300个记录批次,看看是否有帮助,我看到了一些奇怪的事情发生。有些批次需要30秒,有些需要0.012秒。我不知道造成这种差异的原因。

我有一个可重现的场景,其中第一个查询比第二个查询要快许多倍:

select r.ID, r.FileID, r.Data
from Calls c 
join RawData r on r.ID = c.ID 
join DataFiles f on f.ID = r.FileID 
where r.ID between 1118482415 and 1118509835

0.3秒

select r.ID, r.FileID, r.Data
from Calls c 
join RawData r on r.ID = c.ID 
join DataFiles f on f.ID = r.FileID 
where r.ID between 1115330220 and 1118482415

8秒

我发现返回的数据没有明显的差异。他们都返回300条记录和所有记录"数据"列值大约为170个字符。我直接从SqlStudio客户端运行它。此数据库中也没有其他流量。

有人知道可能导致此问题的原因或有任何建议吗?我不能减小列的大小,因为那里有一些更大的记录,只是在这个例子中没有。我在连接中使用的所有列上都有索引(Calls.ID,RawData.ID,RawData.FileID,DataFiles.ID)。

0 个答案:

没有答案