0

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

哪个更快(也许快多少)

SELECT * FROM Table WHERE Id<100000000

或者

SELECT TOP 100000000 * FROM Table ORDER BY Id

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

如果这很重要,我正在使用 Microsoft SQL Server。

4

2 回答 2

1

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

第二个查询需要先对id列进行排序,然后才能开始返回行。排序比仅仅读取表格更昂贵,因此需要更长的时间。

如果id上面有索引,那么推理就会改变。第一个版本可能使用也可能不使用索引。如果是,它将扫描索引,然后逐条记录获取表中的数据。

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

使用索引是否比表扫描快取决于您未提及的因素——表有多大以及您有多少内存。

于 2013-03-24T20:04:42.597 回答
0

这是选择100 000行的估计查询计划:

前Q

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

于 2013-03-24T20:08:50.950 回答