2011-08-04 6 views
2

は何インデックス/インデックス、クエリの次のタイプをより効率的にするためにテーブルの上に作成されることをお勧めします:クエリによってパフォーマンス向上のためのテーブルのインデックス作成

SELECT MAX(val1) 
FROM table 
WHERE val2 = 'x' OR val3 = 'y' 

xとyはもちろん変数です。 val2とval3はほとんど常に一意であり、重複が発生することがあります。

+0

うーんを...とval2のインデックスを、とval3は – Randy

+1

に、あなたは何を試してみましたか?最適なインデックス作成は、テーブルサイズなどに依存することがよくあります。今このクエリで問題がありますか?既にテーブルに他のインデックスがありますか? –

+0

また、MAX値を高速に見つけるために、val1にインデックスが必要です。 – Johan

答えて

4

val3 + val1val2 + val1と別のインデックスなど、クエリの書き込みがあります。

SELECT MAX(val1) 
FROM (SELECT max(val1) FROM table where val2 = 'x' 
     UNION ALL 
     SELECT max(val1) FROM table val3 = 'y' 
    ) dt 
+0

ここでは、OPが 'MAX'を実行するので、' val2 ASC + val1 DESC'と 'val3 ASC + val1 DESC'というインデックスを作成します。インデックスの一部としてval1 DESCを持つことは、val1をインデックスにインクルードされた列として持つよりも優れていると思います。私は、MAXがインデックスがDESCであることを最適化すると思うでしょう。 –

+0

次の索引を使用して索引を検索しました(索引が索引スキャンを実行しました)。 CREATE INDEX ix_test3 ON dbo.table1(val2) CREATE INDEX ix_test4 ON dbo.table1(val3) – rickythefox

関連する問題