day7-mysqlの実施計画の分析

実施計画の分析

実施計画とは何ですか

選択 t1の名前=から* ' ZS ' ;

内蔵のオプティマイザのコスト計算アルゴリズムに従って計画の実施の分析、最終的な選択

実行計画を見ます

説明選択 * world.cityからの、
  DESC 選択 world.cityから*;

実行プランの表示結果の分析

ディスプレイ 説明
テーブル 関連するルックアップテーブル
タイプ クエリのタイプ:フルテーブルスキャン、インデックス・スキャン
possible_keys これは、インデックスに使用することができます
キー 最後に選択されたインデックス
key_lenに インデックスカバーの長さ
スキャンへの問い合わせが必要の行数
エクストラ 追加情報

出力情報の紹介

テーブル

アンケートへのそれは、クエリを複数のテーブルのルックアップテーブルになると、正確な

DESC 選択country.name、city.name 
街からは参加に国を 
 city.countrycode = country.code
 city.population = ' CHN ' ;

タイプのクエリの種類

全表スキャン:すべてのインデックスのないALL

DESCは、選択国番号=都市から* CHN ;
DESCは選択!カントリ=都市から* ' CHN ' ;
DESCを選択し、市内から* 1 = 1 ;
DESCは選択のような都市国番号から* %CH%;
DESC を選択し、市内から*どこのCountryCodeない' CHN '' USA ');

インデックススキャン:index< range< eq_ref< 注:より良い性能を右にcounst(system)

インデックス:全索引スキャン

DESC 選択 world.cityから国番号。

範囲:インデックス範囲クエリ > <> = <=等にまたは間

DESCを選択し、市内から* ID < 10 ;
DESCは選択のような都市国番号から* CHの%;
DESCは、選択都市countrtcodeから* ' CHN '' USA ' );
---> 改写为組合がすべて
 選択国番号=都市から* CHN 
組合がすべて
 選択国番号=都市から* USA 

特別な事情が次の場合、主キーのクエリ行く範囲を

DESCを選択し、市内から* ID!= ' 10 ' 
DESCを選択どこの都市から* IDない1020);

REF:セカンダリインデックス同等のクエリ

DESCは、選択国番号=都市から* CHN  ;

でeq_ref:複数のテーブルには、非駆動表に主キーまたは一意キーを結ぶことを条件に、リンクリスト。

DESC 選択country.name、city.name
街からは参加国を
 city.countrycode =上country.code
 city.population = ' CHN ' ;

CONST(システム):クラスタ化インデックスと同等のクエリ

1 DESCが選択都市から* ID = 10

possible_keys、キー

1.はじめに

possible_keysは:インデックス、およびインデックスに関するすべてのお問い合わせがかかる場合があります。

キー:クエリのインデックスの選択。

ジョイント長さをカバーkey_lenにインデックス

共同インデックスのためにindex(a,b,c)、我々は完全な共同インデックスのアプリケーションのためのより多くの、より良い、クエリにしたいです。

ket_lenは、クエリが複数の部品の共同インデックスを来たことを決定するために私たちを助けることができます。

例えば:IDX(A、B、C)----> AB ABC

完全なカバレッジ

 

選択 T1ここ= aとb =およびCから* =
 選択 t1からどこ* における aとb 及びc における
選択ここで、b t1から* =およびc =及び=
 選択 t1からここで、aとbの順Cによって*

部分的に覆わ

選択 t1からどこ=及びb * =
 選択 = T1 *から
 選択 t1から=およびC * =
 選択 t1からどこ= aとb> <> = <=等およびc = *
 選択 t1からXXXXここで、bによって順

2. key_lenに計算:IDX(A、B、C)

仮定:一部のクエリは完全に3つの関節のインデックスをカバーすることができます。例えば:

選択 t1からどこ=及びb * =およびC =

key_lenに=長さ?+ Bの長さは?+ Cの長さは?

長さは、何を指し?

データ型、文字セット効果:によって長さ

長さは、列のバイト長の最大格納された値を参照します

デジタルタイプ:

  NOT NULL NOT NULLはありません
TINYINT 1 1 + 1
int型 4 4 + 1
BIGINT 8 8 + 1

key_lenに:

INT NOT NULL ---> 4

int型---> 5

文字の種類:UTF8 文字の最大デューティ3つの文字

  NOT NULL NOT NULLはありません
CHAR(10) 3 * 10 3 * 10 + 1
VARCHAR(10) 3 * 10 + 2 3 * 10 + 2 + 1

 

BのCHAR(10)NOT NULL 30

Bチャー(10)31

32 CのVARCHAR(10)nullでありません

CのVARCHAR(10)33

テーブルT1を作成する(INTないヌル4 
Bの   INT5 
のC   CHAR10)ないヌル40 
DのVARCHAR(1043 
)のcharset = utf8mb4

インデックス(A、B、C、D)

MySQLの> DESC 選択 t1からここ= * 1   及びb = 1   およびc = ' '   及びd = ' ' ; 
MySQLの > DESC 選択 = t1から* 1   及びb = 1   およびc = ' ' ; 
MySQLの > DESC 選択 = t1から* 1   及びb = 1 
MySQLの > DESC 選択 = t1から* 1

演習:結論をテストするために計算さkey_lenにするためによると:

完全なカバレッジ

選択 T1ここ= aとb =およびCから* =  
 選択 t1からどこ* における    aとb    及びc における 
選択ここで、b t1から* =およびc =及び=  
 選択 t1からここで、aとbの順Cによって*  

部分的に覆わ

選択 t1からどこ=及びb * = 
 選択 = T1 *から  
 選択 t1から=およびC * =  
 選択 t1からどこ= aとb> <> = <=等およびc = *  
 選択 t1からXXXここで、bによって順

カバーしていません。

BC、B、C、

エクストラ

filesortレコードを使用してクエリが使用するファイルの順序を示すために、説明のソート操作クエリで:明瞭でグループによって順序を...

DESC 選び市国番号=から* CHN 人口によるため、

 

 

継続するには....

おすすめ

転載: www.cnblogs.com/Mercury-linux/p/12339801.html