いくつかの方法で、<ただ、書き込み>データベースチューニング

1.インデックスを作成します。

  • フルテーブルスキャンを回避しようとするには、最初の考慮事項は、どこで、順序インデックスに関与列によってに基づいて与えられるべきです 
  • フィールド上に作成され、多くの場合、インデックスを検索する必要があり、例えば、テーブルのフィールド名でインデックスを作成するために、そしてあなたが名前フィールドにインデックスを作成する必要があり、あなたは多くの場合、従業員の部門とジョブレベルの従業員でインデックス化する必要がある場合、それは従業員の部門にする必要がありますし、両方のフィールド・レベルのスタッフの位置にインデックスを作成します。 
  • 巨大になりがちなので、最初に考えたが、インデックスを作成するときに検索が遅すぎることが判明しているパフォーマンスの向上を取得するためのインデックスを作成します。
  • あまりにも多くのあなたはそれほど頻繁に必要に応じてインデックス列を構築するために使用されるのいくつかを検討する必要がある場合は、インデックス番号テーブルは、6よりも最善ではありません。インデックスは、対応するインデックスは確かに選択の効率を向上させることができ、可能ではないですが、また時に挿入または更新インデックスを再構築することが可能であるため、挿入および更新の効率が低下するので、慎重にインデックスを構築する方法を検討する必要がある、など場合であってもよいです。

2.インデックスの計算を使用しないでください

  • 句、カラムの部分が計算されるか、またはインデックス機能場合、DBMSは、インデックス、フルテーブルのクエリを使用して最適化されず、機能がここで 
    計算に属し、使用中に存在し、一般的に存在する、なぜならインデックスには行きません
  • !<、<=、=、>、> =、BETWEEN、IN、およびLIKEいくつかの時間:where句=または<>演算子は、次のオペレータインデックスのMySQLの使用だけでは避けるべきです。

非効率性:

給与* 22> 11000ユーザSELECT * FROM(給与がインデックス列です)

高効率:

選択*給与> 22分の11000(給料カラムをインデックス付けされた)ユーザから

3.事前にコンパイルされたクエリを使用して

プログラムは通常、ユーザーの入力に基づいて、動的SQLを実行するために使用され、それだけではなく、SQLインジェクションの脆弱性を回避するために、パラメータ化されたSQLを使用してみてください
プリコンパイルされた攻撃、SQLデータベースの最も重要なパラメータを、その最初のパフォーマンスDBMSは、このクエリの最適化のためのSQL文を実施する際に
、後にSQLを直接大幅に実行速度を向上させることができ、プリコンパイルの結果を、使用して実行するように、時間とプリコンパイルを実行します。

言葉の接続シーケンスを調整4.

言葉は、接続は、好ましくは、表は、この原理に基づいて、他の条件の前に書かれているDBMSボトムアップ解析は、一般的に使用され、すなわちことができる 
レコードの最大数を除外します。

5. SQLで可能な複数のSQL文をに圧縮します

SQLを実行するたびに結果を送信し、ネットワーク接続、検査の権限、SQL文のクエリの最適化を確立する必要があり、このプロセスは 
非常に時間がかかり、あなたが過度の実行SQL文を回避しようとする必要がありますので、に圧縮することができますSQL文は、複数の実行を使用しないで実行します。

6.単語がHAVING言葉で置き換え

重合される前に、結果セットが濾過された後にのみHAVING魚はすべてのレコードを検索するので、単語の使用を避けるHAVING 
言葉はこの点で減少させることができるレコードの数によって制限ならば、ブラシは、記録から選択されますオーバーヘッド。典型的には、集計関数で使用される条件HAVING 
ワードが書き込まなければならない状態で、加えて、濾過。

7.エイリアステーブル

SQL文で複数のテーブルを接続する場合は、表の別名と各カラム名の別名の接頭辞を使用します。これが解決し、軽減するための時間短縮ができ 
、カラム名の構文エラーの友達が少ないあいまいな原因何を。

8.組合との代わりにUNION ALL

SQL文は、これら2つの結果セットがの労働組合場合、検索結果は、レコードが重複していない場合でも、2つのユニオンクエリの結果セットを必要とする場合 
も、最終的なソート結果の前に出力、その後、マージしようとしますが、そうならば決定することができます検索結果には重複したレコードは、必要があるときに 
なるように利用組合すべて、効率が改善されません。

9.「隔離」の一時的な中間結果を使用することを検討してください

SQL文を簡素化するための重要な方法は、中間結果の一時テーブル一時的なストレージを使用することで、しかし、メリット一時テーブルよりもはるかに多くが、結果は一時、一時テーブルに格納されます、tempdbの中に背中のクエリは、この手順を複数回回避しますメインテーブルをスキャンするだけでなく、大幅にプログラムの実行「共有ロック」、「更新ロック」をブロッキング輻輳を低減し、並行性を向上さを減少させます。しかし、あなたは避け頻繁に作成し、リソースの消費を減らすために一時テーブル、システムテーブルを削除する必要があります。

必要な場合にのみ、トランザクションで使用10.翻訳を始めます

SQL文でSQL Serverのデフォルトはトランザクションで、実行が完了した後のステートメントは、デフォルトのコミットです。

実際には、これはそれぞれの文の先頭に同様トラン始める最小化形式は、コミットの最後に暗黙の、開始TRANを意味しています。
いくつかのケースでは、我々は明示的にそのような操作は、いくつかのテーブルを変更する必要がある「挿入、削除の変更」を行うと、BEGIN TRANを宣言する必要があり、いくつかのテーブルが成功変更または成功しないかのいずれかが要求されます。TRANは、このような役割を果たすことができる始める、それは一緒に実行されたSQL文のセットの数を入れ、最後に一緒にコミットすることができます。利点は、データの一貫性を確保することであるが、何も完璧ではありません。ロックされたリソースがオフにコミットするまで解放することはできませんすべてのSQL文、前の出願に支払わTRAN価格を開始します。
データベースのパフォーマンスが悪いと、あまりにも多くのトランSQL文トラップを開始した場合、参照してください。大きなトランザクションがコミットする前に、多くのブロックで、その結果、他の文を詰まらせるにバインドされています。
TRAN原則使用を開始し、より良い、SQLステートメントTRANトラップを開始し、データの整合性を確保する前提の下にあります!いくつかのケースでは、トリガは、データを同期ではなく、BEGIN TRANを使用する必要がありますするために使用することができます。

カーソルを使用して11回避

、大量のデータを避けるために、データが大きすぎると、あなたが対応する需要が合理的である検討すべきクライアントに返します。そのため、カーソルの効率が悪い、カーソル操作10,000以上のラインならば、あなたは書き換え検討すべきです。

代わりに、CHAR / NCHARの12を使用varchar型/ NVARCHAR

すべての可変長フィールドの小さな収納スペースの最初の、あなたは検索効率の比較的小さなフィールドで、クエリに続いて、ストレージスペースを節約することができますので、使用の可能性の代わりに、CHAR / NCHARのvarchar型/ nvarchar型は、明らかに高いです。
NULLのようなスペース、必要としないことを考えてはいけない:チャー(100)VARCHAR場合は100文字のスペースがあるにかかわらず、(NULLも含む)の値を挿入するか否かの、スペースが固定され、確立され、フィールドに入力この可変長フィールドは、ヌルスペースを取りません。

13. select文のクエリの最適化

1.以下のいずれかのフィールド返さない、代わりに「*」の分野の特定のリストで、T *からのどこを選択し、使用しないでください
、それ以外の場合は、につながる、where句内のNULL値の判断に避けるべきである。2.フィールドをインデックスとフルテーブルスキャンを使用して放棄するエンジン、
例えば:

numがnullであるここで、tからIDを選択します 

あなたは、ヌル値が存在しないことを保証するために、NUM上の表のnum個の列をデフォルト値の0を設定することができ
、このクエリ:

ここでNUM T = 0からIDを選択
TからIDを選択してここでNUM = 10またはNUM = 20

 

クエリが実行できます。

TからIDを選択してここでNUM = 10
労働組合のすべて
TからIDを選択してここでNUM = 20

4.パーセンタイルを事前にすることはできません

どこ名「%ABC%」のようなトンからIDを選択します

効率を向上させるために、フルテキスト検索とみなすことができます。

連続値5.、それ以外の場合は、フルテーブルスキャンにつながる、------ではないに注意して使用することとの間で使用することはできません

Tここで、NUMに(1,2,3)からIDを選択

TからNUM 1と3の間で選択ID 

6.同等の大きさのクエリ二つの表であれば、そして少しの違いでそれに存在します。
で:
例:表A(小表)、表B(大テーブル)

非効率的な(BからCCを選択)でCCは、インデックステーブルCCカラムAを使用してA SELECT * FROM。 
、(B CC = A.ccからCCを選択)高効率存在インデックステーブルBのCCカラムを使用する。A SELECT * FROM 

カウンター

効率(AからCCを選択)でCCは、インデックステーブルCCカラムBを用いた高速Bから*を選択します。
存在B SELECT * FROM非効率的なインデックステーブルをCCカラムを使用して(CC = B.ccはAからCCを選択)。 

 

14.更新UPDATE文の最適化

あなたが唯一の1,2フィールドを変更した場合は、それ以外の場合は大幅なパフォーマンスのオーバーヘッドを引き起こす頻繁に呼び出される、すべてのフィールドを更新し、ログの多くを持っていません

15. DELETE文の最適化の文を削除します。

重複を削除する最も効率的な方法(ROWID 15を作るために使用されるような)例:

E.ROWID> EMP Eから削除する(X.EMP_NO = E.EMP_NO EMP xからMIN(X.ROWID)を選択)。

 

16.ステートメントの挿入、挿入の最適化

1は、大量のデータを挿入する場合、新しい一時テーブルは、それが代わりにSELECT INTOを使用してもよい場合は速度を上げるために、ログの多数を避けるために、テーブルを作成します。

データの量ならば、リソースのシステムテーブルを容易にするために、最初に挿入し、テーブルを作成する必要があります。

おすすめ

転載: www.cnblogs.com/shuimohei/p/11627245.html