在MSDN文档说,当我们写
SELECT TOP(N) ..... ORDER BY [COLUMN]
我们得到顶部由排序(N)行column
( asc
或desc
取决于我们选择什么样的)
但是,如果我们不指定任何顺序,MSDN说random
的Gail Erickson
指出这里 。 正如他所指出的它应该是unspecified
而不是random
。 但正如Thomas Lee
指出,在那里,
当TOP结合使用具有ORDER BY子句,结果集限制为有序的行的所述第一N个; 否则,返回的行的第一N个ramdom
所以,我跑了一台该查询没有任何指标,首先我跑这个..
SELECT *
FROM
sys.objects so
WHERE
so.object_id NOT IN (SELECT si.object_id
FROM
sys.index_columns si)
AND so.type_desc = N'USER_TABLE'
然后在这些表中的一个,(其实我想下面的查询在所有上述查询返回的这些表的), 我总是得到相同的行。
SELECT TOP (2) *
FROM
MstConfigSettings
这总是返回相同的2行,同样是通过查询1返回的所有其他表true现在执行计划显示了3个步骤..
正如你可以看到没有索引查找,这只是一个纯粹的表扫描,
的Top
示出的行的实际没有为2,也是如此所述Table Scan
; 这是不是这样的(我有很多行)。
但是,当我运行类似
SELECT TOP (2) *
FROM
MstConfigSettings
ORDER BY
DefaultItemId
执行规划显示
和
所以,当我不适用ORDER BY
的步骤是不同的(没有排序)。 但问题是,这如何TOP
当没有工作Sort
,为什么?它总是给出同样的结果?