オラクルのあるテーブルに10万件のレコードがあります。カラム数は30です。
初歩的な話になりますが、(1)と(2)はどちらが速いでしようか。
(1)
SELECT x FROM TBL_A WHERE ...AND...AND...AND...AND...AND
という複雑なSQLを実行するとします。
これに該当するレコード数は[3千件]です。
これで、
value =RS("x")
RS.movenext
を3千回実行する。(sqlを実行するのは一回のみ)
(2)
同じく複雑なSQLを実行します。
SELECT x FROM TBL_A WHERE ...AND...AND...AND...AND...AND VAL=15
これに該当するレコード数は[1]件です。
value =RS("x")
で取得。
また同じSQLを3千回実行する。
上記について初歩的ですが、確認したいです。
sql実行の対象レコードが、数万に上っても、SQLを何回も実行したほうがやはり遅いでしょうか。
また、上記の3千が、100件程度とか少ない場合、速度差が逆転しないでしょぅか。
No.2ベストアンサー
- 回答日時:
1回でできることを複数回でやるメリットは
全くありません。先ず、結果が3000件でも
1件でも抽出にかかる時間はほぼ同じです。
つまり、後者は前者に比べ、2999回分の
余計な時間がかかるということです。
キャッシュ云々は結果論であって、クリアな
状態を前提とすべきです。
むしろ、SQLの組み方一つで実行時間に差が
でます(特にOracleは)ので、高速になる
技法を学ぶ方がずっと有益です。
例えば、以下のようなSQLがあるとします。
SELECT * FROM Z WHERE 条件1 AND 条件2
色々な条件が絡みますが、次のようにすると
速度が改善されることがあります。
SELECT * FROM (SELECT * FROM Z WHWRE 条件1) WHERE 条件2
そうなんですね。抽出にかかる時間がほぼ同じなら、
SQL一回で実行し、あとはレコードを何回も取得する方法が
対象件数にも影響されず、本来理想そうです。
SQLも上記で速度が違うのはしりませんでした。
ありがとうございました。
No.1
- 回答日時:
毎回ディスクアクセスが発生するような検索方法を採った場合では、
SQL を実行した方が遅くなると考えられます。
しかし、連続して処理が行われると仮定するならば、キャッシュに
残っているので、ヒット件数が3千件程度であるならば、ほとんど差が
表れないと考えて良いと思います。
キャッシュに残るというのは、
SELECT x FROM TBL_A WHERE ...AND...AND...AND...AND...AND VAL=15
の結果がキャッシュに残るのではなく、
SELECT x FROM TBL_A WHERE ...AND...AND...AND...AND...AND
の結果がキャッシュに残るのでしょうかね。
それだと確かに、あまりかわらないかもしれないという感じがしますが。
ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Visual Basic(VBA) エクセル VBA 難しいです 1 2023/02/21 15:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
likeとsubstrの使いわけについて
-
WHERE句の実行順序
-
Like文の速度について教えてく...
-
キャッシュを使わずにSELECTを...
-
実行計画HASH JOIN RIGHT OUTER
-
SQL ORDER BYにおける条件について
-
DATE型カラムのインデックスが...
-
アナライズでほとんどの処理が...
-
あいまい検索のパフォーマンス...
-
Oracle8,9で取得したデータを結...
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
SQLサーバで和暦から西暦に変換...
-
PL/SQLカーソルの2重FORループ...
-
Statement ignored というエラー
-
sqlplusでヘッダーが付かない
-
Accessの数値から時間に変換す...
-
或るプロシージャの呼び出し元判定
-
エクセルVBAでUserFormを起動し...
-
PL/SQLでのSQL文法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
キャッシュを使わずにSELECTを...
-
likeとsubstrの使いわけについて
-
WHERE句の実行順序
-
Like文の速度について教えてく...
-
WHERE句はJOIN結合前結合後どち...
-
ヒント句が無効になります
-
JOINの時のONとWHEREの違いにつ...
-
あいまい検索のパフォーマンス...
-
アナライズでほとんどの処理が...
-
SQL ORDER BYにおける条件について
-
800万件のテーブル読み込み...
-
問題解決のストーリーにて PDCA...
-
実行計画HASH JOIN RIGHT OUTER
-
oracleのanalyzeと処理時間につ...
-
PDCAを回すって?
-
【チューニング】インデックス...
-
Oracleで検索すると、フリーズ...
-
Oracle 実行計画、統計情報の見方
-
OEMで負荷の少ないSQLの実行計...
-
データ抽出の速度について
おすすめ情報