5.4.1 テキストインデクスを定義する列を決めるときの考慮点
テキストインデクスを定義する列を決める場合,次に示す点を考慮してください。
(1) テキストインデクスを定義した方がよいケース
次に示す検索を行う場合に,テキストインデクスを定義することを検討してください。
-
LIKE述語による中間一致検索または後方一致検索を行う場合
テキストインデクスを使用すると,B-treeインデクスを使用するよりも,読み込むページ数を削減できます。そのため,B-treeインデクスを定義するよりも,テキストインデクスを定義した方が,高速に検索できます。テキストインデクスは,LIKE述語の一致値に指定する列に定義します。
-
LIKE_REGEX述語を指定した検索を実行する場合
テキストインデクスを使用すると,読み込むページ数を削減できます。そのため,テキストインデクスを定義した方が,高速に検索できます。
-
スカラ関数CONTAINSを指定した検索を実行する場合
テキストインデクスを使用すると,読み込むページ数を削減できます。そのため,テキストインデクスを定義した方が,高速に検索できます。
-
表記ゆれ補正検索を行う場合
表記ゆれ補正検索用のテキストインデクスを使用すると,読み込むページ数を削減できます。そのため,表記ゆれ補正検索用のテキストインデクスを定義した方が,高速に検索できます。表記ゆれ補正検索については,「2.17.1 表記ゆれ補正検索」を参照してください。
-
ワード検索を行う場合
ワード検索用のテキストインデクスを使用すると,読み込むページ数を削減できます。そのため,ワード検索用のテキストインデクスを定義した方が,高速に検索できます。ワード検索については,「2.17.4 ワード検索」を参照してください。
検索対象データとテキストインデクスの関係を次の表に示します。
項番 |
検索対象データ |
テキストインデクスの有効性 |
注意事項 |
---|---|---|---|
1 |
文書データ(100文字以上の文書資料やメールなど) |
◎ |
文字列が長い場合は,テキストインデクスのデータ容量が大きくなるおそれがあります。 また,文書データの場合,検索条件に使用しないような文字列もテキストインデクスのデータに含まれるため,ほかの検索対象データに比べて,テキストインデクスのデータ容量が大きくなる傾向にあります。 |
2 |
英語で書かれた文書データ(100文字以上の文書資料やメールなど) |
◎ |
英語で書かれた文章に含まれる英単語を検索する場合は,テキストインデクスワード検索指定を指定して,テキストインデクスを定義してください。また,スカラ関数CONTAINSを使用してワード検索を行ってください。テキストインデクスワード検索指定については,「5.4.5 ワード検索用のテキストインデクスの指定(TEXT WORDCONTEXT)」を参照してください。 なお,文字列が長い場合は,テキストインデクスのデータ容量が大きくなるおそれがあります。また,文書データの場合,検索条件に使用しないような文字列もテキストインデクスのデータに含まれるため,ほかの検索対象データに比べて,テキストインデクスのデータ容量が大きくなる傾向にあります。 さらに,テキストインデクスワード検索指定を指定すると,指定しない場合に比べて,テキストインデクスのデータ容量が大きくなります。 |
3 |
英数字だけの文字列(URLやアクセスログなど) |
○ |
次の場合は,テキストインデクスを定義しても,効果がない可能性があります。
|
4 |
名称データ(10文字前後の商品名など) |
△ |
次の場合は,テキストインデクスを定義しても,効果がない可能性があります。
|
5 |
数字だけの文字列(IDやコードなど) |
× |
仮に,検索結果が一意に決まる場合であっても,数字だけの文字列のときは文字の組み合わせが少ないため,検索に時間が掛かる可能性があります。そのため,テキストインデクスを定義しても,効果を期待できません。 |
- (凡例)
-
◎:有効である可能性が非常に高い
○:有効である可能性が高い
△:有効である可能性が低い
×:有効ではない
(2) テキストインデクスを定義しない方がよいケース
次のケースに該当する場合は,対象列にテキストインデクスを定義しないようにしてください。
-
列のデータに重複(部分一致または完全一致)が多い場合
-
数字だけの番号列(IDなど)のような文字の種類が少ない場合
-
検索する文字列が「a」や「0」のような単純で短い文字列の場合
-
検索する文字列が長過ぎる場合(1,000文字を超える場合)
仮に,テキストインデクスを定義しても,データの検索範囲を絞り込めないため,検索するページ数が削減できません。そのため,テキストインデクスの効果が期待できません。
(3) テキストインデクスを定義できる列
次の条件を満たす列だけに,テキストインデクスを定義できます。
- テキストインデクスを定義できる列
-
-
CHARACTER型の列
-
VARCHAR型の列
-