kac*_*apy 10 sql-server order-by
SQL Server 如何计算查询执行结果集中记录的顺序?
我试图让它正面或反面,但发现自己挠头。当我更改字段时,我选择的顺序也会更改。当我用 a 执行下面的 SQL 时,SELECT *
我得到相同的记录,但顺序大不相同。
SELECT TOP (900)
AD.ATTACHMENTID,
AD.NAME,
AD.ISINLINE,
AD.INSERTEDDATETIME,
ATMT.ATTACHMENTBLOB,
U.UFID
FROM ATTACHMENTDETAIL AD WITH (NOLOCK)
INNER JOIN MESSAGEATTACHMENT MA ON MA.ATTACHMENTID = AD.ATTACHMENTID
INNER JOIN ATTACHMENT ATMT ON ATMT.ATTACHMENTID = AD.ATTACHMENTID
INNER JOIN MESSAGE MSG ON MSG.ID = MA.MESSAGEID
INNER JOIN MESSAGEDETAIL MD ON MD.MESSAGEID = MA.MESSAGEID
INNER JOIN [USER] U ON U.ID = MD.USERID
LEFT OUTER JOIN XmlExtractionMapping XM ON MA.MESSAGEID = XM.MessageId
WHERE AD.FILEBOXTOKEN IS NULL
AND (XM.XMLEXTRACTIONDATE IS NOT NULL OR
(MSG.MESSAGESOURCEID = 1 AND MD.FolderId <> -4))
AND AD.ISINLINE = 'FALSE'
Run Code Online (Sandbox Code Playgroud)
Aar*_*and 18
由于您还没有告诉 SQL Server 如何对结果进行排序,因此可以自由地以最有效的方式进行排序。通过这种方式,它将取决于排序最便宜的内容,并且您选择的列将推动排序,因为它反过来取决于用于获取查询请求的信息的最便宜的索引。这不仅可以通过更改查询文本,还可以通过数据更改、统计更新、freeproccache、服务包、修补程序等在执行之间更改。如果基础数据快速更改,这对于涉及这么多表的情况尤其不稳定,就像它在 OLTP 应用程序中所做的那样。
如果您想要一个可预测的顺序,为什么不在ORDER BY
查询中使用?正如所写,SQL 指定任何900 行都是可接受的,任何顺序。
即使在很多情况下,您会一遍又一遍地看到相同查询的相同顺序,除非您说 ,否则无法保证ORDER BY <something>
。
归档时间: |
|
查看次数: |
3045 次 |
最近记录: |