这将是一个简单的问题:)
哪个更快(也许快多少)
SELECT * FROM Table WHERE Id<100000000
或者
SELECT TOP 100000000 * FROM Table ORDER BY Id
我假设 Id 从 1 开始并增加 1,因此查询应该给出相同的结果。在我的示例中,我选择了 1 亿条记录,但我的真正意思是“一些非常大量的记录,其中速度差异可能很明显”。
如果这很重要,我正在使用 Microsoft SQL Server。
这将是一个简单的问题:)
哪个更快(也许快多少)
SELECT * FROM Table WHERE Id<100000000
或者
SELECT TOP 100000000 * FROM Table ORDER BY Id
我假设 Id 从 1 开始并增加 1,因此查询应该给出相同的结果。在我的示例中,我选择了 1 亿条记录,但我的真正意思是“一些非常大量的记录,其中速度差异可能很明显”。
如果这很重要,我正在使用 Microsoft SQL Server。
一般来说,第一个会更快。第一个查询将扫描表一次,进行比较,并在找到行时返回行。
第二个查询需要先对id
列进行排序,然后才能开始返回行。排序比仅仅读取表格更昂贵,因此需要更长的时间。
如果id
上面有索引,那么推理就会改变。第一个版本可能使用也可能不使用索引。如果是,它将扫描索引,然后逐条记录获取表中的数据。
第二个查询几乎肯定会使用具有前一段所述性能的索引。使用索引,两者可能是等价的。
使用索引是否比表扫描快取决于您未提及的因素——表有多大以及您有多少内存。
这是选择100 000行的估计查询计划:
第一个计划 (49%) 使用 ID,第二个计划 (51%) 使用top
子句。表结构并不完全相同,但你明白了。