ใน SQL Server เหตุใดการสแกนย้อนหลังของดัชนีคลัสเตอร์จึงไม่สามารถใช้การขนานได้


21

ฉันอ่านเกี่ยวกับ SQL Server internals และหนังสือหรือบล็อกทุกฉบับที่กล่าวถึงเรื่องการสแกนย้อนหลัง

การสแกนย้อนหลังของดัชนีคลัสเตอร์ไม่สามารถใช้การขนาน

โพสต์เดียวที่กล่าวถึงบางสิ่งอยู่ด้านล่างนี้ โพสต์บอกว่าทีม SQL Server ไม่ได้ใช้การปรับให้เหมาะสมที่จำเป็นสำหรับการสแกนย้อนหลัง https://www.itprotoday.com/sql-server/descending-indexes

เนื่องจากเพจระดับลีฟนั้นถูกเชื่อมโยงโดยใช้ลิสต์ที่มีการลิงก์ซ้ำกันสองครั้งฉันไม่เข้าใจว่าทำไมการสแกนย้อนหลังจึงแตกต่างจากการสแกนไปข้างหน้า การชี้แจงใด ๆ ที่ชื่นชมจริง ๆ

คำตอบ:


19

บทความที่อ้างถึงโดยเฉพาะระบุเหตุผลที่การสแกนแบบย้อนกลับที่สั่งซื้อไม่ได้ขนานใน SQL Server 2008 (ตั้งแต่ CU6) ไม่ใช่ทางเทคนิค แต่เป็นเพราะคุณสมบัติไม่ได้รับการร้องขอจากลูกค้าและทีมงาน dev ไม่ต้องใช้มัน

โปรดทราบว่าบทความนี้เขียนขึ้นเกือบ 10 ปีที่ผ่านมาในบริบทของเวอร์ชัน SQL Server 2008 ที่ไม่รองรับในขณะนี้ มีการเปลี่ยนแปลงที่สำคัญกับเอ็นจิ้นการจัดเก็บและเครื่องมือเพิ่มประสิทธิภาพ ที่กล่าวว่าฉันยังคงเห็นแผนขนานสำหรับASCแบบสอบถามและแผนอนุกรมสำหรับDESCรุ่นจากแบบสอบถามตัวอย่างของบทความใน SQL Server 2017:

SELECT *
FROM dbo.Orders
WHERE orderid <= 100000
ORDER BY orderdate ASC;

SELECT *
FROM dbo.Orders
WHERE orderid <= 100000
ORDER BY orderdate DESC;

การเรียกใช้แบบสอบถามที่เหมือนกันภายใต้ SQL 2019 CTP 3.2 แสดงแผนอนุกรมสำหรับทั้งคู่เว้นแต่ฉันเปลี่ยนแบบสอบถามเป็นWHERE orderid <= 50000ที่ซึ่งฉันสังเกตเห็นพฤติกรรมเช่นเดียวกับ SQL Server 2017 ดังนั้นดูเหมือนว่าทั้งการสแกนย้อนหลังแบบขนานยังไม่ได้ถูกนำมาใช้หรือ สถานการณ์ที่แตกต่างเป็นสิ่งจำเป็นในการสังเกตมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.