

テキストファイルからキーワードを拾って
SQLをなげています
SQLの質問になってしまうかもしれません
いまはADO接続でやっています
Open ファイル as input......
SQL = select * from tbl where name like '%キーワード%'
execute(SQL)
レコードセットの値で処理をいろいろ・・・
Loop
もともとのDBの件数がものすごくおおくてselect文に結構な時間が
かかってしまいます。速度をあげるほうほうってあるのでしょうか
私にはおもいつかなくて・・・
こういったほうほうは どう? ってのがありましたら
おしえていただきたいのですが よろしくおねがいします。
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
No.4
- 回答日時:
ayato さん、こんばんは。
このSQLの書き方だと、ひょっとしてindexには期待できないのでしょうか...
ワイルドカードが"%"ってことは、少なくともアクセスじゃないなぁとかひょっとしたらOracle?とか、想像で書いてますが、ワイルドカードを使った検索でindex使えるのって前方一致の時だけじゃないです?
(有識者の方、間違ってたら指摘してください)
likeを使わなくちゃいけないの?とか気になっちゃいます。
他の列をキーにして検索できたりしないのでしょうか?
#なんか、逆に質問ばっかりになっちゃったみたいでごめんなさい。
No.2
- 回答日時:
#1の方の通り、検索条件となるフィールドにインデックスを
作成することが一つあります。何でもつけていいというわけではありませんが。
また、プログラムの実装アルゴリズムですが、
DBの接続はSQLを発行するたびに接続しては遅いです。
さすがにayatoさんはつなぎっぱなしにしてますよね?
一度私はSQL発行ごとにDB接続をやってしまい、速度低下になってました(爆)。
また、検索条件があいまい検索をしなくてはいけないほど複雑なら、
テーブル設計に問題があることも考えられます。
ちょっとプログラムだけの話ではないですが、テーブル設計に問題がある可能性もあるということを知っていればいいかと思います。
No.1
- 回答日時:
まず、likeを使ったあいまい検索は、全レコードを検索しますのでどうしてもパフォーマンスの低下が見られます。
可能であれば、使用を避けたほうが良いです。
その他には、テーブルに検索条件になるフィールドにインデックスを作成してみてはどうでしょうか。私の経験上かなりの改善が見られました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
【Oracle】ADOでSELECT * FROM ・・・・ を実行すると処理が遅いんです
その他(データベース)
-
insertを高速化させたい
その他(データベース)
-
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
4
[性能改善]AccessのDBに大量のデータをUpdateする場合の性能対策について
その他(データベース)
-
5
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
6
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
7
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
ACCESSのFindコマンドが遅い
その他(プログラミング・Web制作)
-
10
MoveNextの処理速度は?
Visual Basic(VBA)
-
11
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
12
ACCESS ADOでupdateが効かない
その他(データベース)
-
13
Access サブフォームでの選択行の取得
その他(データベース)
-
14
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
15
レコードが存在しなかった場合
Microsoft ASP
-
16
accessの処理が遅い
その他(データベース)
-
17
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
18
実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」
Visual Basic(VBA)
-
19
Access クエリ実行が急に非常に遅くなりました。
Access(アクセス)
-
20
ADOのCursorLocationプロパティ
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
Excel VBA での処理時間計測結...
-
5
あっち向いてホイのプログラム...
-
6
OSSemCreate関数に引数”1”と入...
-
7
SQLの速度をあげるには・・・
-
8
DoEvents関数って何?
-
9
VB 電卓 メモリー機能
-
10
DLLで初回呼び出しと最後の...
-
11
ノットイコールを教えて下さい
-
12
実行時のCPU使用率を増やしたい
-
13
エクセルVBA コードが同じでも...
-
14
.netからexcel操作の処理速度が...
-
15
テキストファイルの空行をスキ...
-
16
VC++2010 GDIオブジェクトの解...
-
17
他サイト数値を自サイトに反映...
-
18
異なるプログラミング言語を連...
-
19
WebBrowserの読み込み待ちの処...
-
20
VB.NETにおける二値化処理の高速化
おすすめ情報
公式facebook
公式twitter