SQL Serverで、クラスター化インデックスの逆方向スキャンで並列処理を使用できないのはなぜですか?


21

私はSQL Serverの内部について読んでいますが、すべての本やブログでは後方スキャンについてこれに言及しています。

クラスター化インデックスの逆方向スキャンでは並列処理を使用できません

何かを言った唯一の投稿は、以下のこの投稿です。投稿によると、SQL Serverチームは後方スキャンに必要な最適化を実装していません。https://www.itprotoday.com/sql-server/descending-indexes

リーフレベルのページは二重にリンクされたリストを使用してリンクされているため、後方スキャンが前方スキャンと異なる理由はわかりません。明確化をお願いします。

回答:


19

参照された記事では、SQL Server 2008で逆方向スキャンが並列化されなかった理由(CU6以降)は技術的ではありませんが、機能が顧客から要求されておらず、開発チームがそれを実装することを気にしなかったためです。

この記事は、10年近く前に、現在サポートされていないSQL Server 2008バージョンのコンテキストで書かれていることに注意してください。ストレージエンジンとオプティマイザーに大幅な変更が加えられました。とはいえ、SQL Server 2017の記事のデモクエリからは、ASCクエリの並列プランとDESCバージョンのシリアルプランが引き続き表示されます。

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.