テキストファイルからキーワードを拾って
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で質問しましょう!
似たような質問が見つかりました
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
とっておきの「まかない飯」を教えて下さい!
飲食店で働く方だけが食べられる、とっておきの「まかない飯」。 働いてらっしゃる方がSNSなどにアップしているのを見ると、表のメニューには出てこない秘密感もあって、「食べたい!!」と毎回思ってしまいます。
-
ACCESSで一括処理する方法
その他(データベース)
-
【Oracle】ADOでSELECT * FROM ・・・・ を実行すると処理が遅いんです
その他(データベース)
-
insertを高速化させたい
その他(データベース)
-
-
4
MoveNextの処理速度は?
Visual Basic(VBA)
-
5
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
6
[性能改善]AccessのDBに大量のデータをUpdateする場合の性能対策について
その他(データベース)
-
7
レコードセット(ADO.Recordset)で処理レコードは何番目?
Visual Basic(VBA)
-
8
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
9
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
-
10
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
11
AccessのDAOでフィールド名を配列に格納して・・・
Visual Basic(VBA)
-
12
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
13
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
14
falseとtrue 0,1,-1 の意味が知りたいです
PowerPoint(パワーポイント)
-
15
Accessを開くと「排他モードじゃないので変更しても保存できない」との旨の表示が出てしまう。
Access(アクセス)
-
16
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
17
Accessのレポート上のテキストボックス値を設定したい
その他(データベース)
-
18
ダブルコーテーション付きでCSV出力
Visual Basic(VBA)
-
19
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
20
accessの処理が遅い
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
win10で、正確な待ち時間の作り方
-
テキストファイルの空行をスキ...
-
DoEvents関数って何?
-
VB.NETにおける二値化処理の高速化
-
SQLの速度をあげるには・・・
-
「単体テスト」に関する深刻な...
-
WindowsMessage(ウィンドウメッ...
-
小数点を含む数値かどうか判断...
-
絶対パスの取得について
-
ナップザック問題?をエクセル...
-
Excel VBAにて、2GB超の点群デ...
-
WebBrowserの読み込み待ちの処...
-
プログラム上のCPU稼働率低減に...
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
C# シリアル通信でデータ受信...
-
C言語で、メモリを解放しないで...
-
「キャンセル」ボタン付きの処...
-
C#でのbatファイル実行結果取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
win10で、正確な待ち時間の作り方
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
小数点を含む数値かどうか判断...
-
絶対パスの取得について
-
プログラム上のCPU稼働率低減に...
-
SQLの速度をあげるには・・・
-
プログラミングの授業でPython...
-
If Not c Is Nothing Then ~延...
-
ナップザック問題?をエクセル...
-
ノットイコールを教えて下さい
-
テキストファイルの空行をスキ...
-
実行時のCPU使用率を増やしたい
-
Excel(VBA)でSetTimer関数を使...
-
あっち向いてホイのプログラム...
-
基本情報技術者試験詳しい方へ...
-
VBでの簡易電卓の作成(減算方...
-
キャッシュを意識したプログラ...
-
再帰処理について
-
Excel VBAにて、2GB超の点群デ...
おすすめ情報