2009-05-28 12 views
1

我々はtable1と呼ばれるテーブル...SQLインデックスのパフォーマンス

(c1 int indentity,c2 datetime not null,c3 varchar(50) not null, 
    c4 varchar(50) not null,c5 int not null,c6 int ,c7 int) 

on column c1 is primary key(clusterd Index) 
on column c2 is index_2(Nonclusterd) 
on column c3 is index_2(Nonclusterd) 
on column c4 is index_2(Nonclusterd) 
on column c5 is index_2(Nonclusterd) 

それは千万レコードが含まれています。上記とは別に非クラスタ化インデックスを作成するための最良の方法は何

select from table1 where c1=blah..and c2= blah.. and c3=blah.. 
select from table1 where c2=blah..and c3= blah.. and c4=blah.. 
select from table1 where c1=blah..and c3= blah.. and c5=blah.. 
select from table1 where c1=blah.. 
select from table1 where c2=blah.. 
select from table1 where c3=blah.. 
select from table1 where c4=blah.. 
select from table1 where c5=blah.. 

、または良いインデックスのパフォーマンスを取得し、実行時間を短縮するために、既存のインデックスを変更します。我々は、さまざまな検索条件と「TABLE1」に向いて、いくつかの手順を持っています?ここ

+0

クエリの例では、すべての述部は、列の単一の値に対する等価テストです。また、複数の述部は常にAND演算子と組み合わされます。私はちょうどこれが事実であることを確認しています。あなたのクエリがLIKE述部またはOR演算子を使用していないか、関数内に列参照をラップしています。 – spencer7593

+0

select句はどうですか?常に同じ列数ですか? – gbn

+0

インデックスを表現した方法はちょっと混乱します.2つのインデックス(c1にクラスタ化されたもの、c2、c3、c4、c5にクラスタ化されていないもの)、または5つのインデックスインデックス(c1にクラスタ化されたもの、c2、c3、c4、c5のそれぞれにクラスタ化されていないもの) –

答えて

6

そして今、実際に対応するための...

トリックは、あなたが任意の数の列に単一列の検索だけでなく、複合列検索を持っているということです。上記のクエリが実行されている頻度を理解する必要があります。ほとんど実行されていないクエリについては、インデックス作成時の考慮事項から除外する必要があります。

You 問合せ対象の各列に単一のNCIXを作成するほうがよいでしょう。これは、返される行の数が非常に少ない場合、NCIXの "単一検索"クエリとコンポジット検索を処理できるためです。あるいは、コンポジットインデックスをカバーするに加えて、1列のNCIXのを作成することもできます。決定の要因は、実行頻度と結果の数です。

+2

インデックスが(c1、c2)の場合は、(c1)のインデックスはほとんど必要ありません。 –

+0

if invidualとcolumnsの組み合わせの頻度が等しく非常に高い。個別のインデックスが良好であるか、検索条件に応じてコンポジットインデックスを作成する必要がある – rmdussa

+0

パフォーマンスはどうなりますか? (c1、c2、c3)にindex_6を作成し、(c2、c3、c4)にindex_7を作成し、(c1、c3、c5)にindex_8を作成するとどうなりますか? – rmdussa

0

これは、あなたが提供した情報だけで答えるのはやや難しいです。あなたが体重を計る必要がある他の要因があります。

例: テーブルは頻繁に更新され、頻繁に更新される列は何ですか? インデックスのメンテナンスのため、これらの更新プログラムには費用がかかります。

異なるカラムのカーディナリティはどのくらいですか? 最も頻繁に実行されているクエリは何ですか?これらのクエリのwhere句にはどのような列が表示されますか?

許容できるパフォーマンスのパラメータがそれぞれのクエリに対してどのようなものであるかを最初に把握し、上記のことを考慮して作業する必要があります。

1000万行のテーブルでは、テーブルを分割することで多くの意味をなす可能性があります。

0

MSSQLの全文検索コンポーネントの使用について考えましたか?それはあなたが探しているパフォーマンスを提供するかもしれません?

関連する問題