
oracleのSQLパフォーマンスについて質問です。
当方、SQLは初めてで、ずぶの素人ですが、SQLパフォーマンスを改善することになりました。
質問の仕方も悪いとは思いますが、お力添えをいただきたいと思います。
【質問1】
DBのレコード件数は、SQLパフォーマンスにどう影響するでしょうか?以下例のようなことが知りたいです。
例1
INDEXのないテーブルに対しSQLを発行する場合、レコード件数の多いDBとレコード件数の少ないDBでは、レコード件数が少ない方が、パフォーマンスが良い?
(前提として、検索対象DBは、レコード件数以外に差がないとする)
例2
WHERE句にINDEX項目を使用した場合、DBのレコード件数はパフォーマンスに影響しない
(前提として、アクセスパスは適切で、検索対象をうまく絞り込むことができる)
例3
WHERE句にINDEX項目を使用したSQLをレコード件数の多いDBに発行する場合と、WHERE句にINDEX項目がないSQLをレコード件数の少ないDBに発行する場合では、どちらがパフォーマンスがよいのか
(前提として検索対象DBは、レコード件数以外に差がないとする)
【質問2】
INDEXをDBに追加すると、INSERT、UPDATE、DELETEの際に、どのくらい影響するのでしょうか?
対象のDBは、5項目あり、400万件くらいのレコードがあります。また、複合項目(2項目)のプライマリキーと、単一INDEXがついており、新たに3項目の複合INDEXを追加しようとしています。
以上、よろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
Oracleのバージョンの記載が無いため、最新版という解釈で回答しますね。
質問1のポイントは、SQL文の実行計画が低コストで実施されるよう書いてあるかが大前提ですので、explain planや、SQLトレースを使用して、低コストになるようSQLを書きなおす、そしてテストを行い、再度トレースを採取し・・の繰り返しでチューニングを行うのがベターかと。
ちなみにですが、where句にインデックス項目が使用されていても、その項目が型変換されるよう書き方をされている場合インデックスが使用されなくなる可能性がありますのでご注意下さい。
質問2ですが、これは一概に「こうだ!」という説明は難しいと思います。(詳細な環境説明が無いため回答しにくいです)
また、これはDB全般に言えることですが、1つのSQLをチューニングしていくのはなく、もっと多くなくくりでチューニングをして行ったほうが早い場合もあります。
それには、スタッツパック等のツールを使用します。
それには、CPUの負荷はどれくらいか、ディスクのIO待ちは発生していないか、キャッシュメモリに余裕があるか、バッファヒット率が高いか、一番遅いSQLは何か、ナドナド、様々な情報が出てくるツールですので、それを元に「システム自体のチューニング」を実施していったほうが良いと思います。
乱文乱筆失礼しました。
また、参考にならかったらスミマセン。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
単一グループのグループ関数で...
-
group byの並び順を変えるだけ...
-
データ
-
PL/SQL内の共通関数の引数にフ...
-
1レコード全てを改行なしで表...
-
トランザクションログを出力せ...
-
引数によってwhere句を切り替え...
-
SQL*Loader Append
-
【PL/SQL】FROM区に変数を使う方法
-
SELECT FOR UPDATE で該当レコ...
-
AccessのSQL文で1件のみヒット...
-
アクセスのレポートでレコード...
-
「数字で始まらない」ものを抽...
-
osqleditについて
-
大量レコードをTRUNCATEせずに...
-
GROUP BYを使用したCOUNT
-
Oracleですがsqlで質問です。 ...
-
一部のレコードをバックアップ...
-
oracle DB内のデータを増幅す...
-
値が入っていない日付型の項目...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
単一グループのグループ関数で...
-
SELECT FOR UPDATE で該当レコ...
-
【PL/SQL】FROM区に変数を使う方法
-
where句中のtrim関数について
-
データ
-
SQL*Loader Append
-
AccessのSQL文で1件のみヒット...
-
引数によってwhere句を切り替え...
-
トランザクションログを出力せ...
-
updateで複数行更新したい
-
アクセスのレポートでレコード...
-
group byの並び順を変えるだけ...
-
「数字で始まらない」ものを抽...
-
osqleditについて
-
SQLで条件にヒットしたレコード...
-
デフォルトでデータが表示され...
-
BLOB型項目をSQLの検索条件に指...
-
1レコード全てを改行なしで表...
-
トリガからプロシージャのコー...
-
PL/SQLでフェッチでNULLの項目...
おすすめ情報