データのSQL最適化の議論の大規模な量の例

 今日では、ビューのポイントitputの記事で、声明を議論するために最適化されています。

     オリジナルポスト住所:http://www.itpub.net/viewthread.php?tid=1015964&extra=&page=1

  まず、問題を特定

   文の最適化:     

コードをコピー
次の文の最適化を行う方法:
CREATE TABLEの aa_001    (IP  VARCHAR2 28 )、          名前  VARCHAR2 10 )、          パスワード  VARCHAR2 30 ))SELECT * から aa_001  WHERE  腹腔   (1 2 3 )  ご注文により、 名前  DESC ; - 現在のテーブルには、およそ千万ストリップがあります記録するだけでなく、値の数に不確実です。  




     
コードをコピー

  これらは、文や状況の最適化を最適化する必要があります。

 

   バックスレッドで多くの人々は:いくつかは、最適化する方法を言わない、といくつかは、これは、INはEXISTSいくつか言っ率複合指数(IP、名前)などのIP上にあると言います。

  第二に、質問をします

     このような状況ということ、それを最適化するために、どのように最適化しますか?今日は、この問題を議論します。

  第三に、問題の分析

        1、データの量より千万以上。

        図2は、値の数に不確実です

     データ配信の3.1分析

      ここで著者は、IP、現在分散データ列は、次のものがあり、データ列のIPの分布については言及しませんでした。

         1、IPカラム(ユニーク確率データ、又はデータの重複が小さいです)

         2、IP列(データ不均一、データの一部が複数繰り返されてもよいが、いくつかのより少ない繰り返し)

         図3に示すように、IP列(データがより均一に分散される、データ複製大量のは、主に同一のデータの一部は、(IPレベルデータ、等)の何千も異なっていてもよいです

 

     問題を解決するには:

         1、列IPへのインデックスに基づいて、第1の場合のデータ分布。この時点では、どんなに多くの行の表、ケース内の数字は非常に迅速に、不確実ではありません。

         図2に示すように、データの第2の分布に対応する、IPにおける列インデックス、無効。データの偏在ので、いくつかの高速ないくつか遅いがあるかもしれません

         図3に示すように、分布に対応する第3のデータ、インデックスIP列間違い低速。

        注意:ここに名前DESCによって順序があるデータを取得し、その後、並べ替えの。代わりにソートする前にデータを取って 

 

     大量のデータを削除する必要が、オプティマイザがテーブルスキャン(テーブルスキャン)、というよりもインデックス検索を(インデックスが求めて)使用しているため、2例2及び3の場合、それは、非常に遅いことも可能であるその後、効率が優れたスキャンテーブルであるため、インデックス検索、特に高い同時実行の下で、効率が低いです。

 

    2とをどのように扱うか、状況に対応して3。これは、変更している存在します。実際には、データが中に後ろから来たのSQL Server 2005とOracleでオプティマイザは、効率は同じです一般的な指標の低い効率のこの場合使用。IPは、列にクラスタ化インデックスを構築する場合は次に、それは、より効率的です。私たちは、SQL Server 2005でテストを行います。

 

   表:[DBO] [zping.com]]]約2億データ。列は含まれユーザーID、上記のID、RuleIdや他の列を。同様の声明について、上記の場合のお問い合わせによると: 

選択 * から[ DBO ] [ [zping.com ] ]]  ユーザーID   (' 402881410ca47925010cb329c7670ffb ' ' 402881ba0d5dc94e010d5dced05a0008 ' ' 4028814111a735e90111a77fa8e30384 ' )  順序によって Ruleid  DESC         

 

 

   私たちは、データの分布を見て、ユーザーID、次の文を実行します。

選択し  、ユーザーIDを カウント * )  から [ DBO ] [ [zping.com ] ]]  グループによって ユーザーIDの  順序によって2        

   その後、我々は、データの分布を見て:379個のデータの合計、2は1から150000から、あるデータ分布が大きく傾いていますこれは、図の一部です。

 

 

   IP、非効率的で非クラスタ化インデックスの確立がされており、そして、場合、インデックスをスキャンすることを余儀なくさ、効率が非常に低い、あなたはIOのでしょうテーブルスキャンよりも高い回この時点で我々は、IP上のクラスタ化インデックスを構築することができます。そして、その結果を見てください。

  そして、検索スキャンを収集し、(クラスタ化インデックスを求める)を使用して検索を見つけました。

  クエリによって返された結果を見てみましょう: 

コードをコピー
156603  影響を受けた行)
テーブル 
' [zping.com] ' スキャン数  8 、ロジック読ん  5877を  、物理読み込み  0を  先読みし、  0  回、ロブ論理読み取り  0  ロブ物理読み込み、回数を  0  回、ロブ先読みを  0  回。
表 
ワークテーブル スキャン回数  0 、論理読み取り  0を  物理読み込み、  0を  先読みし、  0  回、ロブ論理読み取り  0  ロブ物理読み込み、回数を  0  回、ロブ先読みを  0  回。
コードをコピー

    だけ少ない6,000回IOよりも15万行を返します。1500万行がソートするため、高効率、中のクエリコスト順序が51%を占めましたもちろん、あなたが(構築することができ、ユーザーID、RuleIdパフォーマンスを向上させるための)複合クラスタ化インデックスが、このDML高いメンテナンスコストを。お勧めできません。

 

   例えば上記の試験から分かるように、最適化ソリューション:

     1のデータ配信:IPへのインデックスを作成します。

     データ分布2,3:IP列にクラスタ化インデックスを構築します。

ます。https://www.cnblogs.com/flysun0311/archive/2012/08/28/2659721.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33816821/article/details/93694191
おすすめ