Oracleデータベース最適化戦略まとめ編
2008 ワード
クエリの効率を向上させるために、私たちは常にいくつかの最適化戦略を行う。本稿では、Oracleデータベースのいくつかの一般的ではないが、非常に有用な最適化戦略を紹介します。
SQL文の最適化
これは簡単です。CPUの高いSQL文を使って、索引、SQL技術などによって修正してください。
SELECT時は関数を利用しません。
頻繁な調査独占をする時、できるだけ直接selectフィールド名を使って、C言語のコードを利用して検索の収穫に二次加工をして、Oracleにごっちゃな関数をさせて数学的に計算することができます。Oracleは汎用性のために、その関数と数学計算のスピードはC言語で直接機械コードにコンパイルして計算するより速いです。
バインディング変数
これはSQLを大幅に減退できる「ハード・パー」であり、私たちのほとんどのプロセスは変数バインディングを終了しました。个别に终わっていないので、修正してもすぐに収获が见られます。
バッチFETCH
万が一、selectが複数の登録(数百、千)に戻ったら、大量のFetchを利用して、例えば順次fetch 1000条を登録して、一つの条のfetchデータよりも速くて、oracleを減退する圧力を抑えることができます。
一括提出
順番に複数の条(例えば10000条以下)を修正して登録し、順次的に提出することは、各条より順次提出することが多いです。もちろん前提は業務ロジックの承認です。
一括添削
もし順次修正が必要ならば、複数の登録を削除して、大量配列バインディングを承認することができる措置は、これは前に述べた「バインディング変数」と似ています。違いは前者がバインディングされている変数です。ここでバインディングされているのは大きな配列の最初のポインタです。このような措置は、1つのバインディングよりもはるかに速いです。
SQL前解析
前の大局部は大量独占で、もう一つのよくあるシーンは小さな事務独占ですが、頻度が非常に高いnextplus.comです。このようなシーンはフリーSQLも混ざらず、最適化の余地はほとんどないですが、独占が頻繁なため、CPUを構成することも高止まりしません。今私達の過程のほとんどは次のような利用形態です。
SQL文の一部の最適化措置
1、SQL文は大文字で書かれています。OracleはいつもSQL文を解析して、小文字を大文字に変換してから励行します。
2、インデックスの列でNOT等閑を利用しないようにします。インデックスの列でNOTを利用することは避けます。NOTはインデックスの列で関数を利用して波及します。
3、OracleがNOTにぶつかると、彼はインデックスを静止させて全表スキャンを励行する。
4、索引の列での計算の利用を避ける。WHERE子文では、索引列は関数の一部であると仮定している。最適化器はインデックスを利用せずに全表スキャンを利用する。
5、できるだけDISTINCTで独占しないで、EXISTSでDISTINCTvalues Shuld never be negativeを交替します。
以上がOracleデータベースの最適化戦略の全部です。Oracleデータベースに関する知識をもっと知りたいなら、Oracleデータベース欄に注目して、収穫があると信じています。
SQL文の最適化
これは簡単です。CPUの高いSQL文を使って、索引、SQL技術などによって修正してください。
SELECT時は関数を利用しません。
頻繁な調査独占をする時、できるだけ直接selectフィールド名を使って、C言語のコードを利用して検索の収穫に二次加工をして、Oracleにごっちゃな関数をさせて数学的に計算することができます。Oracleは汎用性のために、その関数と数学計算のスピードはC言語で直接機械コードにコンパイルして計算するより速いです。
バインディング変数
これはSQLを大幅に減退できる「ハード・パー」であり、私たちのほとんどのプロセスは変数バインディングを終了しました。个别に终わっていないので、修正してもすぐに収获が见られます。
バッチFETCH
万が一、selectが複数の登録(数百、千)に戻ったら、大量のFetchを利用して、例えば順次fetch 1000条を登録して、一つの条のfetchデータよりも速くて、oracleを減退する圧力を抑えることができます。
一括提出
順番に複数の条(例えば10000条以下)を修正して登録し、順次的に提出することは、各条より順次提出することが多いです。もちろん前提は業務ロジックの承認です。
一括添削
もし順次修正が必要ならば、複数の登録を削除して、大量配列バインディングを承認することができる措置は、これは前に述べた「バインディング変数」と似ています。違いは前者がバインディングされている変数です。ここでバインディングされているのは大きな配列の最初のポインタです。このような措置は、1つのバインディングよりもはるかに速いです。
SQL前解析
前の大局部は大量独占で、もう一つのよくあるシーンは小さな事務独占ですが、頻度が非常に高いnextplus.comです。このようなシーンはフリーSQLも混ざらず、最適化の余地はほとんどないですが、独占が頻繁なため、CPUを構成することも高止まりしません。今私達の過程のほとんどは次のような利用形態です。
loop
parse sql;
bind var;
execute sql;
end loop;
私たちはバインディング変数の措置を利用していますが、独占が頻繁なため、多くの「ソフトパー」及びネット通信を構成しています。メモリデータベースでは、事前解析を許可するなどして効率を向上させていますが、Oracleは以前から開発者にこのような形式を提供しています。プロセスを以下の形式に変更します。
parse sql;
bind var;
loop
execute sql;
end loop;
これでOracleを減退する圧力を抑えることができ、励行効率を少なくとも倍に向上させることができます。しかし、このような形は過程構造の変化に影響を及ぼしています。そうでないと、後期に再調整すると危険と仕事量が大きくなります。SQL文の一部の最適化措置
1、SQL文は大文字で書かれています。OracleはいつもSQL文を解析して、小文字を大文字に変換してから励行します。
2、インデックスの列でNOT等閑を利用しないようにします。インデックスの列でNOTを利用することは避けます。NOTはインデックスの列で関数を利用して波及します。
3、OracleがNOTにぶつかると、彼はインデックスを静止させて全表スキャンを励行する。
4、索引の列での計算の利用を避ける。WHERE子文では、索引列は関数の一部であると仮定している。最適化器はインデックスを利用せずに全表スキャンを利用する。
5、できるだけDISTINCTで独占しないで、EXISTSでDISTINCTvalues Shuld never be negativeを交替します。
以上がOracleデータベースの最適化戦略の全部です。Oracleデータベースに関する知識をもっと知りたいなら、Oracleデータベース欄に注目して、収穫があると信じています。