桐井戸端BBS過去ログ2001


幅田の制作日記


処理を高速化したいため索引を作ってみる

 たしか、処理速度を速めたいときは索引などというものを作ればいい、とマニュアルに書いてあったような気がしたので、[内容]を整列項目とした索引を作ろうと思ったら、

「KD1139 整列項目値が長すぎます。」

とのエラーメッセージが出て、桐に叱られました。
 おいおい、1レコード当たり4000文字まで入力できるっていうのに、索引作るのに文字数の制限ってあるのかよ?
 Uさんに聞いてみました。


絞り込みと索引の関係

 [内容]に入っているデータの長さが2000文字を超えているためエラーとなったそうです。たしかに、[内容]の項目には3800文字を超え、4000文字の制限ぎりぎりのレコードもいくつかあります。
 索引に指定した項目の文字数の合計は2000文字以下でなければならない、という制約があるようです。
 さらに、文字列型の項目で検索や絞り込みを行う場合、現在の索引の「整列順」と比較式の「文字比較方法」が一致していないと、索引は使えないのだそうです。「整列順」の指定に「辞書拡張順」ていうのはありませんよね。だから、「拡張辞書順」で絞り込みを行う場合は、索引があっても使用されないわけです。
 また「含む」の場合はすべての索引データを読むことになり、[内容]以外の項目に多くのデータが入っているのであれば、ファイルをすべて読むよりは、[内容]がキーになっている索引をすべて読むほうが速いということになるそうです。
 このケースでは、[内容]がデータの大半になるので、ほとんど処理速度は変わらないと思われます。

 「索引を使うと、イコールの比較や大小比較、先頭一致のときは高速比較ができるけれど、拡張辞書順はダメ」と覚えておきましょう。

 結局、今回私が行いたいのは、「拡張辞書順」で「含む」の絞り込みを行いたいので、[内容]で索引を作ろうとしたこと自体が無意味ということになりました。なぁんだ。
 通常、2000文字を超えるようなデータの項目に対して索引を作るなんてことはないでしょうから、あんまり問題じゃありませんね。


拡張辞書順について

 拡張辞書順とは?
 これは基本事項ですが、重要なことですのでおさえておきます。初心者の方、注目ですよ!
 完成版では「あいまい検索」にチェックをつけたときに、拡張辞書順で検索するようになっています。

・空白文字を無視して比較する。
 幅田_浩司 と 幅田浩司 などは一致するとみなす。
・繰り返しの記号(ヽヾゝゞ々)は、直前の文字に置き換える。
・全角と半角、ひらがなとカタカナ、ひらがな/カタカナの普通の文字と拗音などの小さい文字、英字の大文字と小文字、清音と濁音と半濁音を同じ文字として扱う。

 詳しくはマニュアル見てね。

続きは書籍をご参照ください


戻る