VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2003/08/28(Thu) 00:00
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe^3: 検索を早くしたい

> 魔界の仮面弁士さんのおっしゃる通り、インデックスを張るのがよいと思います。
> 【回答】にインデックスを張って、テストしてみて下さい。

ところがJETの場合、MEMO型フィールドにIndexは利用できなかったりするのです。
……正確には、張れない事もないのですが、完全な効果は得られません。
(無理に張っても、文字列の後半部分にはインデックスが働きません)

そもそも、『WHERE 回答 like '*ListBox*'』のような部分検索においては、
JETの"RushMore Technology"によるクエリー最適化が働きませんので、ほとんど意味はありません。
http://support.microsoft.com/default.aspx?scid=kb;ja;172199
http://support.microsoft.com/default.aspx?scid=kb;ja;240434

ですから高速化するなら、どうにかして、『回答 LIKE 'LISTBOX*'』か、もしくは
『回答= 'LISTBOX'』の形になるように設計する必要があります。(先のNo.5579はその一例です)
あるいは、全文検索可能な(JET以外の)DBに移行するか…ですね。


> どうせ処理が遅いし、夜間の週次バッチだから、ということで。
> インデックスはいらないかな、って張らなかったことがありました。
インデックスの無い検索は、ホントに遅いですね。。。(^_^;)
詳細は書けませんが、ある日次処理でインデックスを全て外したら、
15分→20時間(泣)という結果になった事さえありますし。

もっとも、インデックスが有効に利用されるような設計でなければ、
意味はないですけれどね。フィールドに無意味にインデックスを張ったせいで、
今度は更新速度が低下してしまった、という話も聞きますし。


# 複雑なSQLでは、SQLが正しく最適化されているかどうかを検証するために、
# レジストリの実行プランフラグを有効にして、showplan.outファイルの結果を確認したり、
# DAOのISAMStatsメソッド や ADOのJET_SCHEMA_ISAMSTATSスキーマを利用して、
# ディスクI/Oやロック頻度について調べてみると良いかもしれません。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -