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