• ベストアンサー

SQLの速度をあげるには・・・

テキストファイルからキーワードを拾って SQLをなげています SQLの質問になってしまうかもしれません いまはADO接続でやっています Open ファイル as input...... SQL = select * from tbl where name like '%キーワード%' execute(SQL) レコードセットの値で処理をいろいろ・・・ Loop もともとのDBの件数がものすごくおおくてselect文に結構な時間が かかってしまいます。速度をあげるほうほうってあるのでしょうか 私にはおもいつかなくて・・・ こういったほうほうは どう? ってのがありましたら おしえていただきたいのですが よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

確かに・・・Like演算子・・・あまり使いたくないですね・・・ 文字列比較は処理を遅くさせるし、増してや「=」ではなくLikeですから、膨大な時間がかかる恐れが・・・ ちなみにぼく自身、DB系を多くしています。今の仕事もDB系なのですが、元となるホストは他の会社が行っており、それにあわせて作らなければなりません。 で、そのホスト連携部分に文字列を比較しなければならない部分があるんですよ・・・・ 自分の会社ならまだしも、他の会社がすでに設計済みのDBだから変えようがないのです。。。 まぁ愚痴っても仕方ないか・・・ なのでぼくも(不本意ながら)Like演算子を使用しています。 長い前置きはさておき・・・ 本題のSQLのスピードなのですが、 http://homepage2.nifty.com/inform/vbdb/addnew.htm こちらに面白い記述がありました。 AddNewにかかるスピードの検証で Access データベースの場合: AddNew のほうが INSERT INTO より5倍以上速い SQL Server の場合: INSERT INTO のほうが AddNew より 1.4倍 くらい速い とあります。 たぶんで物を言ってはいけないと思うけど、言っちゃいます。 (1)もしDBがアクセスで  >レコードセットの値で処理をいろいろ・・・  のところがUpdate用のSQL文で処理を行ってる場合  Recordsetをして、処理を行う (2)もしDBがアクセス以外で  >レコードセットの値で処理をいろいろ・・・  のところがRecordsetで処理を行ってる場合  Recordsetをせずに、UPDATE用のSQLを実行する 未検証なのですが多分イメージとして、こういうパターンが各DBに適してるのかな? すでにこのパターンなのであれば、意味ないですね(^^;)

参考URL:
http://homepage2.nifty.com/inform/vbdb/addnew.htm

その他の回答 (4)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.5

teebeeさん AccessでもADOで接続したら、ワイルドカードは%なんですよ。

  • teebee
  • ベストアンサー率68% (17/25)
回答No.4

ayato さん、こんばんは。 このSQLの書き方だと、ひょっとしてindexには期待できないのでしょうか... ワイルドカードが"%"ってことは、少なくともアクセスじゃないなぁとかひょっとしたらOracle?とか、想像で書いてますが、ワイルドカードを使った検索でindex使えるのって前方一致の時だけじゃないです? (有識者の方、間違ってたら指摘してください) likeを使わなくちゃいけないの?とか気になっちゃいます。 他の列をキーにして検索できたりしないのでしょうか? #なんか、逆に質問ばっかりになっちゃったみたいでごめんなさい。

  • zerosix
  • ベストアンサー率31% (47/149)
回答No.2

#1の方の通り、検索条件となるフィールドにインデックスを 作成することが一つあります。何でもつけていいというわけではありませんが。 また、プログラムの実装アルゴリズムですが、 DBの接続はSQLを発行するたびに接続しては遅いです。 さすがにayatoさんはつなぎっぱなしにしてますよね? 一度私はSQL発行ごとにDB接続をやってしまい、速度低下になってました(爆)。 また、検索条件があいまい検索をしなくてはいけないほど複雑なら、 テーブル設計に問題があることも考えられます。 ちょっとプログラムだけの話ではないですが、テーブル設計に問題がある可能性もあるということを知っていればいいかと思います。

  • masabou7
  • ベストアンサー率18% (2/11)
回答No.1

まず、likeを使ったあいまい検索は、全レコードを検索しますのでどうしてもパフォーマンスの低下が見られます。 可能であれば、使用を避けたほうが良いです。 その他には、テーブルに検索条件になるフィールドにインデックスを作成してみてはどうでしょうか。私の経験上かなりの改善が見られました。

関連するQ&A