次の複合クラスター化インデックスを検討してください。
CREATE UNIQUE CLUSTERED INDEX ix_mytable ON mytable(a, b)
明らかに、 bに個別のインデックスを使用すると、 bの特定の値の検索が高速になります。
ただし、bの個別のインデックスが使用されていない場合でも、 aの離散値のツリーをトラバースして、テーブル スキャンの代わりにbの特定の値を持つタプルを見つけるために複合インデックスを使用できるように思えます。bのローカル検索、aの次の値へのジャンプなど。
これが SQL Server のしくみですか? (たとえば、MSSQL が複数の列を持つインデックスに単一のハッシュ値を使用する場合はそうではありません。)
それはそうであり、他の理由で複合インデックスがすでに必要であり、aの離散値の数が十分に少ない場合、パフォーマンス/スペースのトレードオフは、 bの個別のインデックスを持つことから遠ざかる可能性があります。
(上記の UNIQUE および CLUSTERED 制約は、この例では実際には必要ありませんが、 bの個別のインデックスを含まないbの最速の取得を表します -- 前者はaの各ループのショートカットを提供し、後者は削除しますルックアップでの 1 度の間接参照)。