【发布时间】:2013-11-11 07:36:29
【问题描述】:
运行以下查询将返回 4 行。正如我在 SSMS 中看到的,返回行的顺序与我在 IN 子句中指定的顺序相同。
SELECT * FROM Table WHERE ID IN (4,3,2,1)
我可以说返回行的顺序总是与它们在 IN 子句中出现的顺序相同吗?
如果是,那么以下两个查询是否以相同的顺序返回行? (因为我测试过订单是一样的,但我不知道我是否可以相信这种行为)
SELECT TOP 10 * FROM Table ORDER BY LastModification DESC
SELECT * FROM Table WHERE ID IN (SELECT TOP 10 ID FROM Table ORDER BY LastModification DESC)
我问这个问题是因为我有一个相当复杂的选择查询。使用这个技巧给我带来了大约。就我而言,性能提升了 30%。
【问题讨论】:
-
不,订单不像
inclause 中的那样得到保证。 -
如果没有指定 order by 子句,我认为返回结果的顺序是基于主键列的
-
我知道如果没有指定'order by',那么结果的顺序是不确定的,但是你能想象SQL Server在IN子句中以随机顺序处理值吗?在我的例子中,这个 ID 是主键
-
SQL server 根据需要处理记录;这甚至取决于物理文件布局。您应该永远假设任何隐式顺序 - 既不是按主键也不是按聚集索引。您的第二组查询可以以不同的顺序返回记录;但是,您可以向外部查询添加额外的“order by”。
标签: sql-server select in-clause