図7は、key_lenに:インデックスで使用されるバイト数は、クエリがカラムによって計算されるインデックスの長さを使用することができると述べました。key_lenにフィールドを使用すると、完全にインデックスに利用するかどうかを確認することができます。ken_len長いが、より完全にインデックスを使用して説明しました。
どのように計算する:
①、ルック指数+ INT = 4の長さのタイプフィールドと、VARCHAR(20) = 20; CHAR(20)= 20
②これによって異なる値に文字セットに応じて、VARCHARまたは文字列フィールドである場合、例えば、UTF-8 3により、GBKは2を取るために、
2バイトの文字列を追加するには、このダイナミック③varchar
④は、空のフィールドは、1バイトを追加することができます
最初のセット:key_lenに=年齢+名バイト長バイト長= 4 + 1 +(20 * 3 + 2)= 5 + 62 = 67
グループII:key_lenにバイト長=年齢= 4 + 1 = 5
図8は、REF:可能な場合、使用される表示列インデックス、一定です。どの列または定数は、インデックス列の値を見つけるために使用されています。
図9は、行:行の列は、MySQLは、それがクエリの実行を調べなければならないと考えている行数を示します。より良いです!
10、エクストラ:他の追加の重要な情報です。
1、filesortレコードを使用して
MySQLは代わりに、テーブルのインデックス順の読み出し、外部データの順序インデックスを用いて説明します。MySQLはインデックスを使用することはできません
仕分け作業の完了は、「ソート・ファイル」と呼ば
:状況がfilesortレコード
最適化後の状況を、filesortレコード表示されなくなります:
2、一時的に使用します
クエリ結果をソートするときに、一時テーブルで保存中間結果を作るために、MySQLは一時テーブルを使用します。クエリグループORDERBYをソートし、グループ化で共通
前の最適化:
最適化:
3、インデックスを使用して
Usingindex代表インデックス(CoveringIndex)、テーブル内のデータ行をアクセスしないようにカバーする対応する選択操作を用いて表現、効率が良いです!もしusingwhere同時に、インデックスが検索インデックスキー値を行うために使用されていることを示し; NO usingwhere場合は、同じ時間インデックスだけではなく実行されるルックアップ指標を使用するよりも、データを読み取るために使用されることを示しています。並べ替えまたはグループのインデックスを使用します。
4、どこ使用し
たフィルタのところ使用を示しています。
。5、バッファに参加使用
。6を、どこインポッシブル
節が常に偽である場合には、任意のタプルを取得するために使用することはできません。
図7に示すように、選択テーブル離れ最適化された
実行フェーズを待つことなく、インデックスベースの最適化MIN / MAX動作またはストレージのMyISAMエンジン最適化COUNT(*)動作のためにGROUPBY句なし、次いで計算、照会実行プラン生成フェーズが完了する最適化。
InnoDB内:
MyISAMテーブルで中: