SQL Serverは、クエリ実行の結果セット内のレコードの順序をどのように把握しますか?
頭や尻尾を作ろうとしているのですが、頭をひっかいています。フィールドを変更すると、選択する順序も変更されます。以下のSQLをaで実行すると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'
RCSI?説明してください...
—
kacalapy 2012年
RCSI = Read Committed Snapshot Isolation。stackoverflow.com/questions/816650/…を
—
アーロンバートランド
ORDER BY
句がないと、SQL Server(およびその他のRDBMS)は、感じていることは何でも行います。
NOLOCK
ください。これを使用してはならない理由がさまざまに表示されます。後者については、sqlblog.com/blogs/aaron_bertrand/archive/2009/10/11/...