web-dev-qa-db-ja.com

2列のクラスター化インデックス

私は多対多のテーブルを持っています、としましょう:

PersonJob(personId,jobId)

クラスター化インデックス(personId、jobId)を使用します。

質問は:

SQLのどこかにある場合は、次のようなクエリを作成します。

SELECT *
FROM PersonJob JOIN Job ON PersonJob.jobId = Job.jobId
.......

そのクラスター化インデックスを利用して、PersonJobテーブル内の特定のjobIdを持つレコードを検索しますか?または、PersonJobテーブルのjobId列に新しい非クラスター化非一意インデックスを作成する方がよいでしょうか?

ありがとうPawel

14
dragonfly

クラスター化インデックスの利点はなく、クエリは引き続きPersonJobテーブルのすべての行をスキャンする必要があります。

クラスター化インデックス(jobID、personId)で列が逆になっている場合は、インデックスを利用します。クラスター化インデックスは、インデックスを形成する列の値によってテーブル内の実際の行を並べ替えることを考慮してください。したがって、(personId、jobID)のクラスター化インデックスを使用すると、同じpersonIdを持つすべての行が(jobIDの順序で)「グループ化」されますが、同じjobIDを持つ行はテーブル全体に分散されます。

16
Paolo Falabella