SQL Server는 쿼리 실행 결과 집합에서 레코드 순서를 어떻게 파악합니까?
나는 머리 또는 꼬리를 만들려고 노력하고 있지만 내 머리를 긁적입니다. 필드를 변경하면 순서를 선택하는 것도 변경됩니다. 아래 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'
RCSI?
—
kacalapy
RCSI = 커밋 된 스냅 샷 격리 읽기. 참조 stackoverflow.com/questions/816650/...
—
아론 버트 랜드
ORDER BY
절이 없으면 SQL Server (및 기타 RDBMS) 는 원하는대로 작업합니다 .
NOLOCK
사용하지 않아야하는 모든 이유를 알 수 있습니다. 후자에 대해서는 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/11/…를