2017-10-13 14 views
0

私はMS SQLのかなり大きなテーブル(1億以上の行)の2つのカラムにインデックスを持っています。 別のクエリのパフォーマンスを向上させるために、2つの列をカバーするインデックスと3つ目のインデックスを必要とします。既存のインデックスを変更するか、新しいインデックスを追加する

既存のインデックスを変更して、3つの列をすべて含めるか、まったく新しい列を作成する必要がありますか?

答えて

0

3つの列をすべて含めるか、まったく新しい列を作成するように既存のインデックスを変更する必要がありますか?

テーブルを照会する方法によって異なります。

select col1,col2 from table1 where col1>40 and col2=40 

だから、2番目の列は有用ではありませんクエリ以下

create index nci on tablea(Col1,col2) 

は文句を言わない、インデックス、上記を満たすクエリ以下インデックス

select * from table1 where col1=1 and col2>10 
select * from table1 where col1=1 and col2=10 

をsatsifyます..あなたは、インデックスの下に持っていると仮定します最初の列で平等以外の比較を使用する場合は、3番目の列を追加すると同じことが適用されます(最初の列上の平等)あなたがカバーされるようにクエリを必要とし、また、彼らは上記のサンプルのカテゴリに分類された場合のn

要するに

、あなたは、3番目の列を追加することができます。..

+1

は、TABLE1からCOL1、COL2を選択する>>> where col1> 40 and col2 = 40最初の列で等値以外の比較を使用すると、2番目の列は有用ではありません。このクエリは、col1、col2のみを返します。元の表には100個の列があります。だから、(Col1、col2)のインデックスは、それがカバーしているように(インデックススキャン)使用され、最も狭い – sepupic

+0

私は、インデックスの作成で "tablea"と仮定し、クエリのtable1は同じテーブルであり、 – SEarle1986

+0

私は最初の列の不等式が残差述語@sepupic – TheGameiswar

関連する問題