ลักษณะที่ปรากฏของชุดผลลัพธ์ที่เรียงลำดับโดยไม่มีส่วนORDER BY
คำสั่งมักเป็นผลมาจากการเรียกค้นแถวตามลำดับดัชนี เหตุผลหนึ่งที่ทำให้การสแกนดัชนีโดยทั่วไปได้รับการคัดเลือกภายใต้READ COMMITTED
ระดับการแยกเริ่มต้นคือมันช่วยลดโอกาสของความผิดปกติที่เกิดขึ้นพร้อมกันที่ไม่พึงประสงค์เช่นการเผชิญหน้าแถวเดียวกันหลายครั้งหรือข้ามบางแถวทั้งหมด นี่คือรายละเอียดในหลายแห่งรวมถึงในบทความชุดนี้เกี่ยวกับระดับการแยก
ด้วยNOLOCK
คำใบ้ตารางพฤติกรรมนี้จะผ่อนคลายและการเข้าถึงตารางจะดำเนินการภายใต้READ UNCOMMITTED
ระดับการแยกที่เข้มงวดมากขึ้นซึ่งอาจสแกนข้อมูลในลำดับการจัดสรรแทนที่จะเป็นดัชนีดัชนี ดังที่อธิบายไว้ในลิงค์นั้นการตัดสินใจว่าจะใช้การสแกนตามลำดับการจัดสรรหรือการสั่งซื้อดัชนีนั้นจะขึ้นอยู่กับเอ็นจิ้นการจัดเก็บ ทางเลือกนี้อาจมีการเปลี่ยนแปลงระหว่างการประหารชีวิตโดยไม่มีการเปลี่ยนแปลงในแผนแบบสอบถาม
นี้อาจจะเป็นนามธรรมมาก แต่สามารถแสดงให้เห็นได้ง่ายขึ้นด้วยคำสั่งโดยใช้ฟังก์ชั่นที่ไม่มีเอกสารกับฐานข้อมูล AdventureWorks2012
USE AdventureWorks2012;
GO
-- Appears to be ordered by BusinessEntityID
-- File:Page:Slot goes up and down several times
-- Show physical locations with sys.fn_PhysLocFormatter (undocumented)
SELECT
P.BusinessEntityID,
[(File:Page:Slot)] =
sys.fn_PhysLocFormatter(%%physloc%%)
FROM Person.Person AS P;
-- Same query with TABLOCK or NOLOCK
-- Allocation-order (IAM) scan
-- Now appears to be ordered by File:Page:Slot instead of BusinessEntityID
SELECT P.BusinessEntityID,
[(File:Page:Slot)] =
sys.fn_PhysLocFormatter(%%physloc%%)
FROM Person.Person AS P WITH (NOLOCK);
แบบสอบถามที่ยืมมามีการปรับเปลี่ยนเล็กน้อยจากพอลไวท์
ในที่สุดเพื่อให้ชัดเจนคำตอบนี้เกี่ยวกับลักษณะที่ปรากฏของชุดผลลัพธ์ที่ได้รับคำสั่ง มีไม่มีการรับประกันเพื่อนำเสนอORDER BY
โดยไม่ต้องระดับบนสุด
การสแกนตามลำดับการจัดสรรสามารถเกิดขึ้นได้ในหลาย ๆ สถานการณ์เช่นเมื่อได้รับการล็อคระดับตารางหรือฐานข้อมูลอยู่ในโหมดอ่านอย่างเดียว ความเท่าเทียมยังสามารถมีผลต่อลำดับข้อมูลที่ส่งคืนได้จุดสำคัญคือไม่มีORDER BY
ข้อมูลการสั่งซื้อที่ส่งคืนอาจแตกต่างกันไปตามการออกแบบ