インデックスを使用する方法のMYSQL5.7指数(A)

ほとんどのMySQLのインデックス(PRIMARY KEY、  UNIQUE、  INDEX、および  FULLTEXT)が中に保存されている  B-木例外:空間データ型のインデックスは、R-木を使用します。 MEMORY テーブルもサポートして  ハッシュインデックスを。 InnoDB 用途反転リストの  FULLTEXT インデックス

Bツリー

データベースインデックスの使用に人気のあるツリーデータ構造。構造は、高速完全一致のルックアップ(オペレータに等しい)および範囲(例えば、より小さい、より大きい、及び可能、常にソート保たれる  BETWEEN 演算子)。このタイプの索引は、次のようなほとんどのストレージエンジン、のために利用可能である  InnoDB と  MyISAM

Bツリーノードは多くの子供を持つことができるので、Bツリーは、ノードあたり2人の子供に限定される二分木、同じではありません。

対照的  でのみ利用可能であるハッシュインデックス、  MEMORY ストレージエンジン。 MEMORY ストレージエンジンはまた、B-treeインデックスを使用することができ、あなたはB-treeインデックスを選択する必要があり  MEMORY 、いくつかのクエリは範囲演算子を使用する場合のテーブル。

B-treeインデックス:正規表現で使用できる列の比較  、、 、  、  、   またはオペレーター。 引数が場合は定数文字列の先頭にワイルドカードではなく、インデックスものために使用することができる比較。=>>=<<=BETWEENLIKELIKE

ハッシュインデックス:だけ速く、等価比較のために使用。

MySQLはにインデックスを使用します。

  • WHEREクイック 検索句の一致する行

  • 検討から行を排除します。あなたが複数のインデックスの間で選択することができた場合は、MySQLは多くの場合、行の最小数を見つけるために使用されるインデックス(最も 選択的なインデックス)。

  • 表は、複数列のインデックスを持っている場合、オプティマイザは、行を見つけるためにインデックスの任意の左端の接頭辞を使用することができます。あなたは3列のインデックスを持っている場合たとえば、 (col1, col2, col3)あなたは、インデックス付き検索機能を持っている(col1)、  (col1, col2)としても(col1, col2, col3)詳細については、  8.3.5、「マルチカラムインデックスを」

  • カップリングを行う際に、別のテーブルから行を検索します。同じ種類とサイズを宣言した場合、MySQLはより効果的にインデックス列に使用することができます。この場合、 および  それらが同じサイズとして宣言されている場合と同じであると考えられています。たとえば、 と  彼らは同じサイズである、しかし  、と  はありません。VARCHARCHARVARCHAR(10)CHAR(10)VARCHAR(10)CHAR(15)

    非バイナリ文字列間の比較のために、2つの列が同じ文字セットを使用します。例えば、ペアutf8に嘘をつく  latin1嘘は、可能性が高かったインデックスの使用を排除します。

    そうでない場合、直接比較値、コンパレータ異なる列を変換することなく、インデックスの使用を防止することができる(例えば、列文字列は、時間または数列と比較されます)。所与の値に対して、として1数値のシーケンスでは、それは文字列内の複数の列とすることができる値の任意の数、例えば、に等しく  '1'、、 ' 1'、  '00001'または'01.e1'これは文字列の列のいずれかのインデックスを使用する可能性を排除します。

  • 検索特定のインデックス列か、  値を使用している場合、これは、プリプロセッサ、プリプロセッサチェックによって最適化され たインデックスの前に現れたすべてのキーパーツのをこの場合、それぞれのMySQLの表現や  表現キーのルックアップに一度、および定数と交換してください。すべての式が定数に置き換えている場合は、クエリはすぐに戻ります。例えば: MIN()MAX()key_colWHERE key_part_N =constantkey_colMIN()MAX()

    SELECT MIN(key_part2),MAX(key_part2) FROM tbl_name WHERE key_part1=10;
  • パケットは、ソートまたは左端接頭利用可能なインデックス(例えば、ある場合に並べ替えまたはグループにテーブルの上に完成  全てのキーバック部分が場合あり、逆の順序で鍵を読み出します。参照  「最適化することで、セクション8.2.1.14を並べ替え」と  「パケットを最適化することにより、」セクション8.2.1.15フェスティバル。 ORDER BY key_part1key_part2DESC

  • いくつかのケースでは、クエリは、データラインを照会することなく、値を取得するために最適化することができます。(クエリのために必要なすべての結果指数と呼ばれる  カバーインデックステーブル内の一部のカラムだけを使用してクエリは、インデックスに含まれている場合)、選択された値は、速度を向上させるために、インデックスツリーから検索することができます。

    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1

そう、ほとんどまたは小さなテーブルや大きなテーブルのすべての行に取り組むことの重要性クエリレポートのための重要な指標ではありません。行の中で最もアクセスのクエリのニーズは順次速くインデックスを処理するよりも読まれている場合。シーケンシャルリードは、クエリはすべての行を必要としない場合でも、可能な限りを見つけるために、ディスクを減らすことができます。詳細ご参照くださいセクション8.2.1.20は、「フルテーブルスキャンを避けます」

 

 

おすすめ

転載: www.cnblogs.com/semonshi/p/11941436.html