mysqlデータベースの4つのインデックスの基本的な使用
2598 ワード
MYSQLデータベースの4種類のインデックスタイプの簡単な使用
≪プライマリ・キー・インデックス|Primary Key Index|oem_src≫:プライマリ・キーは一意のインデックスですが、
≪一意索引|Unique Index|oem_src≫:索引列のすべての値は1回のみ表示されます.つまり、
≪一般インデックス|General Index|emdw≫:
全文インデックス:全文インデックスのインデックスタイプは
1.なぜ
MYSQLデータベースの2つのインデックス方法
HASH
hashは、数学の関数マッピングのような(key=>value)形式のキー値ペアであり、複数のkeyが同じvalueに対応することを許可するが、1つのkeyが複数のvalueに対応することは許されない.この特性のため、hashはインデックスに適しており、hashインデックスは一度に位置決めすることができます.
制限
1)Hashインデックスは「=」,「IN」および「<=>」クエリのみを満たすことができ,範囲クエリは使用できない.
(2)Hashインデックスは,データのソート操作を回避するために利用できない.HashインデックスにはHash計算後のHash値が格納されており、Hash値のサイズ関係は必ずしもHash演算前のキー値と完全に同じではないため、データベースはインデックスのデータを利用してソート演算を避けることができない.(3)Hashインデックスは部分インデックスキークエリを利用できない.コンビネーションインデックスの場合、Hashインデックスは、Hash値を計算する際にコンビネーションインデックスキーが結合された後にHash値を一緒に計算するので、Hash値を単独で計算するのではなく、コンビネーションインデックスの前の1つまたは複数のインデックスキーでクエリーを行う場合、Hashインデックスも利用できません.(4)Hashインデックスはいつでもテーブルスキャンを回避できない.
BTREE
BTREEインデックスとは、インデックス値を一定のアルゴリズムでツリー状のデータ構造に格納するものである
BTREEのMyISAMでの形式はInnodbと少し違います
Innodbには、primary key形態とleaf nodeにデータが格納され、インデックスキーのデータだけでなく、他のフィールドのデータも格納されている2つの形態があります.二つ目はsecondary indexであり、leaf nodeと通常のBTREEとの差は多くないが、プライマリ・キーを指す情報が格納されている.
MyISAMでは、プライマリ・キーは他のものとあまり変わらない.ただしInnodbとは異なる点はMyISAMであり、leaf nodeに格納されているのはプライマリ・キーの情報ではなく、データ・ファイル内の対応するデータ行を指す情報である.
≪プライマリ・キー・インデックス|Primary Key Index|oem_src≫:プライマリ・キーは一意のインデックスですが、
PRIMARY KEY
として指定する必要があります.各テーブルにはプライマリ・キーが1つしかありません.≪一意索引|Unique Index|oem_src≫:索引列のすべての値は1回のみ表示されます.つまり、
でなければなりません.値は
です.≪一般インデックス|General Index|emdw≫:
のインデックス・タイプ.値は空であり、一意性の制限はありません. 全文インデックス:全文インデックスのインデックスタイプは
FULLTEXT
です.全文インデックスは、varchar、char、text
タイプのカラムで作成できます.ALTER TABLE
またはCREATE INDEXコマンドで作成できます.大規模なデータセットの場合、ALTER TABLE(またはCREATE INDEX)コマンドによる全文インデックスの作成は、全文インデックス付きの空のテーブルにレコードを挿入するよりも高速です.MyISAM
は全文インデックスをサポートし、InnoDB
はmysql 5.6以降は
をサポートした.1.なぜ
後
?従来のクエリー方法は、テーブルの順序に従って遍歴するものであり、いくつかのデータをクエリーするにかかわらず、mysqlはテーブルのデータを最初から最後まで遍歴する必要がある.インデックスを追加した後、mysqlは一般的にBTREE
を通じて
を生成し、データベースをクエリーする際に、インデックスファイルを見つけて ( )
を行い、対応するキーを見つけてデータ2を取得する.インデックスの代価2.1インデックスを作成するのはインデックスファイルを生成するためで、
2.2インデックスファイルは
で、私たちのdml操作も同様にインデックスファイルを修正するので、性能が低下することが予想されます.インデックスはどのcolumnで使用しますか?3.1クエリー条件フィールドとして頻繁に作成すべきインデックス3.2の一意性があまりにも悪いフィールドはインデックスの作成に適していないが、頻繁にクエリー条件として、例えばgender性別フィールド3.3
3.4 where
のフィールド
のまとめ:以下の条件を満たすフィールドこそインデックスを作成すべきである.a:whereバー
b:このフィールドの内容
c:フィールドの内容
に違いない.MYSQLデータベースの2つのインデックス方法
HASH
hashは、数学の関数マッピングのような(key=>value)形式のキー値ペアであり、複数のkeyが同じvalueに対応することを許可するが、1つのkeyが複数のvalueに対応することは許されない.この特性のため、hashはインデックスに適しており、hashインデックスは一度に位置決めすることができます.
制限
1)Hashインデックスは「=」,「IN」および「<=>」クエリのみを満たすことができ,範囲クエリは使用できない.
(2)Hashインデックスは,データのソート操作を回避するために利用できない.HashインデックスにはHash計算後のHash値が格納されており、Hash値のサイズ関係は必ずしもHash演算前のキー値と完全に同じではないため、データベースはインデックスのデータを利用してソート演算を避けることができない.(3)Hashインデックスは部分インデックスキークエリを利用できない.コンビネーションインデックスの場合、Hashインデックスは、Hash値を計算する際にコンビネーションインデックスキーが結合された後にHash値を一緒に計算するので、Hash値を単独で計算するのではなく、コンビネーションインデックスの前の1つまたは複数のインデックスキーでクエリーを行う場合、Hashインデックスも利用できません.(4)Hashインデックスはいつでもテーブルスキャンを回避できない.
BTREE
BTREEインデックスとは、インデックス値を一定のアルゴリズムでツリー状のデータ構造に格納するものである
BTREEのMyISAMでの形式はInnodbと少し違います
Innodbには、primary key形態とleaf nodeにデータが格納され、インデックスキーのデータだけでなく、他のフィールドのデータも格納されている2つの形態があります.二つ目はsecondary indexであり、leaf nodeと通常のBTREEとの差は多くないが、プライマリ・キーを指す情報が格納されている.
MyISAMでは、プライマリ・キーは他のものとあまり変わらない.ただしInnodbとは異なる点はMyISAMであり、leaf nodeに格納されているのはプライマリ・キーの情報ではなく、データ・ファイル内の対応するデータ行を指す情報である.