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