2012-04-23 16 views
1

検索フィールドに一つのインデックスを定義バーサス4つの指標の定義:は、私は、次の列があり、従業員テーブルを持っている

employeeID (PK) 
First_name 
    Last_name 
    Third_name 
    Age 
    Sex 
    Telephone 
    Dateofbirth 
    Position 

と私は、これらのフィールドのいずれかを使用して、従業員を検索するための検索機能があります -

First_name 
Last_name 
Telephone 
Dateofbirth 

ユーザは、これらのフィールドの組み合わせを指定して検索に含めることができます。インデックスを作成するための最良の方法は何か検索を向上させるために今

,,私必要があります: -

  1. は、4つの検索フィールドに別の4つのインデックスを作成しますか?

OR

  1. 一緒に4つの列を含む単一のインデックスを作成する方がよいでしょうか?

OR

  1. 第三よりよい解決策はありますか?

BR

+0

インデックス '(FIRST_NAME、LAST_NAME、電話、dateOfBirthのは)' ** **ヘルプあなただけでは単に 'last_name'を探してないときに。これは、n個の最も左側の列が使用される場合にのみ使用できます。したがって、4つの列を持つ1つのインデックスは、通常無意味です。**常に4つの列すべてを使用するクエリが多い場合を除き... –

答えて

2

番目のオプション(すべての4つの列に一つのインデックス)は、ほとんど常に等の任意のクエリ第二のカラムを含み、ユーザーが常に一つの列が含まれていることを知っている限り有益である可能性が非常に高いではありません索引の最初の列を見ないのは、少なくとも索引検索の目的では、その索引を使用するつもりはありません。そのようなインデックスは、選択リストに他の列が含まれていない場合でも、そのような場合にデータを取得するために使用されます。

4つのインデックスがすべて必要かどうかはわかりません。名字の検索が名字なしで行われるのは本当ですか?ユーザーがどのくらい頻繁にJohnを検索すると思いますか?私はそれらをスキャンし、単一のインデックス(LastName,FirstName)としてそれらを組み合わせてみましょう。私はあなたが誕生日のための多くの検索を持っていればまた驚くでしょう。従業員が同僚の年齢/誕生日を知る(または簡単に見つけることができる)のは本当に一般的な習慣ですか?

+0

したがって、検索フィールドとして最初と最後の文字のみを含める必要があります。これらの2つのフィールドの単一インデックスを定義しますか? –

+0

*あなたがすべきかどうかわかりません。それはおそらく私がやることです。 –

0

従来のインデックスを使用する理想的なソリューションは実際にはありません。どのように動作するか考えてみると、インデックスは実際には特定のフィールドに対してテーブルをソートするようなものです。したがって、4つの列すべてに1つのインデックスしかない場合は、実際に最初のインデックスを使用することができます。 4つのインデックスを使用すると、SQL Serverは各インデックスに対して順番に検索できます。

ワイルドカードパターンに対して、検索している場合は、上記の議論の余地がある:

COLUMN LIKE '%searchstring%' 

検索は、それは、各行の内容を検索する必要がありますindex--を使用することはできません。

このようなシナリオでは、フルテキストインデックスを考慮する必要があります。

http://msdn.microsoft.com/en-us/library/ms142571.aspx

関連する問題