Sql 选择TOP(顶部)并选择speed(速度)所在的位置

Sql 选择TOP(顶部)并选择speed(速度)所在的位置,sql,sql-server,Sql,Sql Server,这将是一个简单的问题: 哪一个更快,可能快多少 SELECT * FROM Table WHERE Id<100000000 我假设Id从1开始并增加1,所以查询应该给出相同的结果。 在我的示例中,我选择了1亿条记录,但我实际上指的是一些非常大数量的记录,其中速度差异可能很明显 如果这很重要的话,我会使用Microsoft SQL Server。一般来说,第一个会更快。第一个查询将扫描表一次,进行比较,并在找到行时返回行 第二个查询需要对id列进行排序,然后才能开始返回行。这种分类比仅仅

这将是一个简单的问题:

哪一个更快,可能快多少

SELECT * FROM Table WHERE Id<100000000
我假设Id从1开始并增加1,所以查询应该给出相同的结果。 在我的示例中,我选择了1亿条记录,但我实际上指的是一些非常大数量的记录,其中速度差异可能很明显


如果这很重要的话,我会使用Microsoft SQL Server。

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

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

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

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


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

这里是一个用于选择100000行的估计查询计划:


第一个计划49%使用ID,第二个计划51%使用top子句。表结构并不完全相同,但您知道了。

您的测量结果显示了什么?表定义包括索引是什么?您确实意识到Id<100000000和TOP 100000000甚至不是一回事吗?@Tomalak。给定id从1开始并递增1的条件,两个返回基本相同的答案ok,一个返回99999行,另一个返回1000000行,但这是一个诡辩。@GordonLinoff但这是唯一一个假设条件,它是真的。在现实生活中,记录可能会被删除,而这在现实生活中是不可能的。
SELECT TOP 100000000 * FROM Table ORDER BY Id