OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 暇なときにでも
  • 質問No.153874
  • 閲覧数1472
  • ありがとう数1
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 25% (16/64)

テキストファイルからキーワードを拾って
SQLをなげています
SQLの質問になってしまうかもしれません
いまはADO接続でやっています

Open ファイル as input......

SQL = select * from tbl where name like '%キーワード%'
execute(SQL)

レコードセットの値で処理をいろいろ・・・
Loop

もともとのDBの件数がものすごくおおくてselect文に結構な時間が
かかってしまいます。速度をあげるほうほうってあるのでしょうか
私にはおもいつかなくて・・・

こういったほうほうは どう? ってのがありましたら
おしえていただきたいのですが よろしくおねがいします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル12

ベストアンサー率 65% (276/422)

確かに・・・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に適してるのかな?

すでにこのパターンなのであれば、意味ないですね(^^;)
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル6

ベストアンサー率 18% (2/11)

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


  • 回答No.2
レベル10

ベストアンサー率 31% (47/149)

#1の方の通り、検索条件となるフィールドにインデックスを 作成することが一つあります。何でもつけていいというわけではありませんが。 また、プログラムの実装アルゴリズムですが、 DBの接続はSQLを発行するたびに接続しては遅いです。 さすがにayatoさんはつなぎっぱなしにしてますよね? 一度私はSQL発行ごとにDB接続をやってしまい、速度低下になってました(爆)。 また、検索条件があい ...続きを読む
#1の方の通り、検索条件となるフィールドにインデックスを
作成することが一つあります。何でもつけていいというわけではありませんが。

また、プログラムの実装アルゴリズムですが、
DBの接続はSQLを発行するたびに接続しては遅いです。
さすがにayatoさんはつなぎっぱなしにしてますよね?
一度私はSQL発行ごとにDB接続をやってしまい、速度低下になってました(爆)。

また、検索条件があいまい検索をしなくてはいけないほど複雑なら、
テーブル設計に問題があることも考えられます。

ちょっとプログラムだけの話ではないですが、テーブル設計に問題がある可能性もあるということを知っていればいいかと思います。
  • 回答No.4
レベル8

ベストアンサー率 68% (17/25)

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

ワイルドカードが"%"ってことは、少なくともアクセスじゃないなぁとかひょっとしたらOracle?とか、想像で書いてますが、ワイルドカードを使った検索でindex使えるのって前方一致の時だけじゃないです?
(有識者の方、間違ってたら指摘してください)

likeを使わなくちゃいけないの?とか気になっちゃいます。
他の列をキーにして検索できたりしないのでしょうか?

#なんか、逆に質問ばっかりになっちゃったみたいでごめんなさい。
  • 回答No.5
レベル12

ベストアンサー率 65% (276/422)

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

AccessでもADOで接続したら、ワイルドカードは%なんですよ。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ