重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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件)

Oracleのバージョンの記載が無いため、最新版という解釈で回答しますね。



質問1のポイントは、SQL文の実行計画が低コストで実施されるよう書いてあるかが大前提ですので、explain planや、SQLトレースを使用して、低コストになるようSQLを書きなおす、そしてテストを行い、再度トレースを採取し・・の繰り返しでチューニングを行うのがベターかと。

ちなみにですが、where句にインデックス項目が使用されていても、その項目が型変換されるよう書き方をされている場合インデックスが使用されなくなる可能性がありますのでご注意下さい。

質問2ですが、これは一概に「こうだ!」という説明は難しいと思います。(詳細な環境説明が無いため回答しにくいです)


また、これはDB全般に言えることですが、1つのSQLをチューニングしていくのはなく、もっと多くなくくりでチューニングをして行ったほうが早い場合もあります。
それには、スタッツパック等のツールを使用します。
それには、CPUの負荷はどれくらいか、ディスクのIO待ちは発生していないか、キャッシュメモリに余裕があるか、バッファヒット率が高いか、一番遅いSQLは何か、ナドナド、様々な情報が出てくるツールですので、それを元に「システム自体のチューニング」を実施していったほうが良いと思います。

乱文乱筆失礼しました。
また、参考にならかったらスミマセン。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す