我有一个SQL Server 2008数据库,大约有1400万行。在这里面有两个表为什么TOP或SET ROWCOUNT使我的查询如此缓慢?
Table1
rowId int, primary key
someData1 int
someData2 int...
Table2
id int, primary key
rowId ==> int, refers to the rowId from Table1
someCalculatedData int...
Table2.rowId is not a foreign key, but I did make a Non-clustered, Non-Unique index on it
当我输入我插入所有数据到表1,然后发现没有在表2中的条目以及将数据插入此表行的数据。
我一次选择250,000行,处理数据并将它们插入到表2中,然后查找下一个250,000行等等,直到它们没有任何表中没有任何行的行进入表2。
select TOP 250000 rowId from Table1
where NOT EXISTS (select rowId from Table2 where Table1.rowId=Table2.rowId)
该查询速度真的很慢,现在需要两分钟才能获得下一批。 如果我在没有使用TOP或SET ROWCOUNT关键字的情况下运行查询并获取所有行,则查询以大约15秒的时间返回结果。
有谁知道为什么TOP和SET ROWCOUNT导致查询拿这么多再然后让所有的数据?
我可以提高查询的性能和每一次仍然只能获得数据的一个子集?
查询是否在〜15秒内退回所有行,或者它*开始*返回行,15秒后第一行? – 2009-11-18 23:11:34
@Remus我的想法确切。 – 2009-11-18 23:14:29
如果我在Sql Server Management Studio中运行查询,我可以在5-8秒后看到一些结果,并且在没有TOP关键字的情况下所有结果都是15秒。如果我包含TOP关键字,我不会在2分钟内看到任何东西。 – nick 2009-11-18 23:15:21