web-dev-qa-db-ja.com

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

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

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

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

リーフレベルのページは二重にリンクされたリストを使用してリンクされているため、バックワードスキャンがフォワードスキャンと異なる理由がわかりません。明確化は本当にありがたいです。

21
Kishan Dasari

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

この記事は、現在サポートされていないSQL Server 2008バージョンのコンテキストで10年近く前に書かれたことに注意してください。ストレージエンジンとオプティマイザに大幅な変更が加えられました。そうは言っても、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と同じ動作が観察されました。まだ実装されていないか、それを観察するには別のシナリオが必要です。

19
Dan Guzman