実行中: SQL Server 2008 R2 Standard。これは、SQL Server だけでなく、すべてのデータベースに関する質問だと思いますが。
背景:私は常に、インデックスの最先端は非常に選択的であるべきだと聞いたり、読んだり、言われたりしてきました。これは、特定の値または値の小さなセット (製品 ID など) を求めるクエリがある場合に意味があります。
一般的な質問:高度に選択的でないインデックスが役立つ場合はありますか?
例: 3 億 5000 万行のテーブルがあります。テーブルには一連の価格が含まれています。テーブルには次の列があります。
priceId
-- テーブルのクラスタ化インデックスwarehouseId
-- 150m の列に均等に分散された 10 の倉庫の 1 つに fkalgorithmId
-- 1 億 5000 万行に均等に配分された、価格の計算方法に関する 23 のアルゴリズムの 1 つに fkpriceDate
-- 最後に価格を計算した日付productId
次に、次のクエリを実行します。
select productId
from price
where warehouseId = 1
and algorithmId = 1
order by priceDate
具体的な質問: このようなインデックスは役に立ちませんか?
create nonclustered index ix_p
on price (warehouseId, algorithmId, priceDate) includes (productId)
SQL Server が一度に巨大なチャンクを切り出し、priceDate
. それは理にかなっていますか?そして、それは機能しますか?
注:これを試してみて、見つけたものをお知らせします。