1

次の列を持つ従業員テーブルがあります。

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

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

First_name
Last_name
Telephone
Dateofbirth

また、ユーザーはこれらのフィールドの任意の組み合わせを指定して、検索に含めることができます。

検索を改善するために、インデックスを作成する最良の方法は何ですか?

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

また

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

また

  1. 3番目のより良い解決策はありますか?

ブラジル

4

2 に答える 2

2

2 番目のオプション (4 つの列すべてに 1 つのインデックス) は、ユーザーが常に 1 つの列を含めたり、ほとんどの場合 2 番目の列を含めたりすることがわかっていない限り、あまり役に立ちません。 index は、少なくともインデックス シークの目的で、そのインデックスを利用するつもりはありません。そのような場合でも、選択リストに他の列が含まれていない場合は、そのようなインデックスを使用してデータを取得できます。

4 つのインデックスすべてが必要かどうかはわかりません。姓なしで名の検索が行われる可能性は本当にあるのでしょうか? ユーザーがジョンを検索する頻度はどれくらいだと思いますか? それらをスキャンして、単一のインデックスとして結合させます(LastName,FirstName)。また、生年月日の検索が多かったら驚かれることでしょう。従業員が同僚の年齢や誕生日を知っている (または簡単に見つけられる) ことは本当に一般的なことですか?

于 2012-04-23T02:49:31.363 に答える
0

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

ただし、ワイルドカード パターンに対して検索している場合、上記は意味がありません。

COLUMN LIKE '%searchstring%'

その検索ではインデックスを使用できません。各行の内容を検索する必要があります。

これらすべてが、まさにこの種のシナリオ向けのフルテキスト インデックスを検討する必要があることを示唆しています。

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

于 2012-04-23T02:58:39.517 に答える