Dalam SQL Server, mengapa pemindaian mundur dari indeks berkerumun tidak dapat menggunakan paralelisme?

21

Saya telah membaca tentang SQL Server internal dan setiap buku atau blog menyebutkan ini tentang pemindaian mundur.

Pemindaian mundur indeks berkerumun tidak dapat menggunakan paralelisme

Satu-satunya posting yang mengatakan sesuatu adalah yang di bawah ini. Posting mengatakan bahwa tim SQL Server tidak menerapkan optimasi yang diperlukan untuk pemindaian mundur. https://www.itprotoday.com/sql-server/descending-indexes

Karena halaman tingkat daun ditautkan menggunakan daftar yang ditautkan dua kali lipat, saya tidak mengerti mengapa pemindaian mundur berbeda dengan pemindaian maju. Klarifikasi apa pun sangat dihargai.

Kishan Dasari
sumber

Jawaban:

19

Artikel yang direferensikan secara spesifik menyatakan alasan pemindaian mundur tidak diparalelkan dalam SQL Server 2008 (per CU6) tidak teknis tetapi karena fitur tersebut tidak diminta oleh pelanggan dan tim pengembang tidak repot-repot untuk mengimplementasikannya.

Perhatikan bahwa artikel ini ditulis hampir 10 tahun yang lalu dalam konteks versi SQL Server 2008 yang sekarang tidak didukung. Telah ada perubahan signifikan pada mesin penyimpanan dan pengoptimal. Yang mengatakan, saya masih melihat rencana paralel untuk ASCpermintaan dan rencana seri untuk DESCversi dari permintaan demo artikel di 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;

Menjalankan kueri yang sama di bawah SQL 2019 CTP 3.2 menunjukkan rencana seri untuk keduanya kecuali jika saya mengubah kueri WHERE orderid <= 50000, di mana saya kemudian mengamati perilaku yang sama dengan SQL Server 2017. Jadi sepertinya pemindaian mundur paralel masih belum diimplementasikan atau diperlukan skenario yang berbeda untuk mengamatinya.

Dan Guzman
sumber