SELECT TOP和SELECT WHERE速度

时间:2013-03-24 19:54:53

标签: sql sql-server

这将是一个简单的问题:)

哪一个更快(也许更快)

SELECT * FROM Table WHERE Id<100000000

SELECT TOP 100000000 * FROM Table ORDER BY Id

我假设Id从1开始并增加1,因此查询应该给出相同的结果。 我在我的例子中选择了100万条记录,但我的意思是“一些真正大量的记录,速度差异可能会很明显”。

如果重要的话,我正在使用Microsoft SQL Server。

2 个答案:

答案 0 :(得分:1)

一般来说,第一个会更快。第一个查询将扫描表一次,进行比较,并在找到它们时返回行。

第二个查询需要在id列开始返回行之前对其进行排序。排序比仅仅阅读表格更昂贵,因此需要更长的时间。

如果id上有索引,则推理会发生变化。第一个版本可能使用也可能不使用索引。如果是,它将扫描索引,然后按记录获取表记录中的数据。

第二个查询几乎肯定会使用上一段中描述的具有性能的索引。有了索引,两者可能是等价的。

使用索引是否比表扫描更快取决于您未提及的因素 - 表的大小以及您拥有的内存量。

答案 1 :(得分:0)

以下是选择 100 000 行的估算查询计划:

Top Q

第一个计划(49%)使用ID,第二个计划(51%)使用top子句。表格结构并不完全相同,但你明白了。