SELECT *
FROM Movies
WHERE studioName = ‘Disney’ AND year = 1990;
これらの索引はどれくらい役立ちますか?SQLの索引の基礎を理解する
CREATE INDEX YearIndex ON Movies(year);
CREATE INDEX StudioIndex ON Movies(studioName);
CREATE INDEX YSIndex ON Movies(year,studioName);
CREATE INDEX SYIndex ON Movies(studioName,year);
WHERE句がyear = 1990の場合、各インデックスはどの程度助けになりますか?
年のインデックスを作成することは、映画が作成された年月が長いため、実際には役立ちます。そのため、検索は大幅に最小限に抑えられます。
Studioname
でも、学年よりも多くの年があるため、助けになります。明らかに、検索は、前の2
studioname,year
良いが、以前ほど良好ではない以上によって最小化されるので、
year,studioname
は、この場合、より良い選択です。
WHERE句が< 1990の場合、各インデックスはどれくらいの助けになりますか?
この場合、1990年よりも小さい年をすべて検索する必要があるため、studionameのインデックスを作成すると、1年あたりのインデックス作成に役立ちます。したがって、年にインデックスを作成すると、1990年未満のすべての年のパス、私はstudioname、年の索引付けは、より良い選択肢だと思う。
これを正しく考える方法はありますか?
(year、studioName)と(studioName、year)の両方のインデックスを比較している場合は同等かもしれませんが、少なくともPostgresではインデックスの最初の列を検索するのは、 (索引の接頭辞を読み取ることができるため)2番目のものです。 「1990年未満のすべての年」が何を意味するのかはわかりません。 – Ryan
どのDBMS? Moviesテーブルのサイズはどれくらいですか?提案された各インデックスのカーディナリティはどのくらいですか? – cschneid
1990年未満のすべての年。私はeveryという言葉の使用が誤解を修正すると思います。"毎年1990年未満" – daniel