1. MySQLのインデックス
1.1インデックスタイプ
- 主キーのインデックス:必要なインデックス列の値がヌル値繰り返されないことはありません
- 唯一のインデックス:インデックス列の値が必要でユニークかつnullにすることができます
- フルテキストインデックス:インデックスとしてリストされている大規模なテキストオブジェクトと
- 複合インデックス:コンビネーションインデックス列の複数列の値は、NULL値を許可しません
- 通常のインデックス:インデックスとして普通のテーブル列、制限はありません
1.2主キーインデックス一意のインデックスの違い
- プライマリキーインデックスとユニークインデックスが列の値にわずかに異なる要件である、主キーインデックスはより厳しいです。
- 各テーブルには1つのプライマリキーインデックスを持つことができ、インデックスがユニークな複数のを持つことができます。
- 外部キーではなく、一意のインデックスとして主キー。
- 主キーは、いくつかのユニークなインデックスを含む、作成された後、一意のインデックスは、必ずしも主キーではありません。
- 主キーが制約され、インデックスが一意のインデックスは、本質的に異なるの両方が、あります
1.3複合インデックス
最も左のプレフィックス列名が長すぎるため、インデックスの組み合わせ以下、最も一般的には左端の列に検索又はソートとして使用される、降順で、複合インデックス、複合インデックスの確立に相当し、それによって効率を低下させる、大きすぎる指標をもたらし得ます列の最初の数文字は、インデックスの基準とすることができます。
2. MySQLのストレージエンジン
InnoDBの | MyISAMテーブル |
---|---|
別々に格納された情報をインデックステーブルの定義とデータは、.FRM記述ファイル形式は、テーブルを定義するために使用され、ストアデータファイルに使用するの.ibd | 3ディスク上に格納されたファイル、およびデータの格納に使用さ.MYDファイル形式としてのInnoDB .FRMに、ファイル形式は.MYIインデックスファイルを格納するために使用されます。 |
より多くのメモリとストレージ容量を必要とし、それはデータとインデックスをキャッシュするため、メモリ内のバッファプールを作成します | 圧縮することができる、小さなフットプリント(表動的、静的テーブル、圧縮された表) |
大量のデータが先頭に困難であるときは、バックアップ用のデータファイルをコピーすることができます | ファイルとして保存されたデータ転送を容易にするクロスプラットフォーム |
トランザクションセーフ(ACID)は、ロールバック、取引、取引に外部キーをサポートし、クラッシュリペア容量タイプテーブル | MyISAMテーブルは、高いパフォーマンスが、それはトランザクションをサポートしていないことを強調し、各クエリは、InnoDBのより原子、実行速度であります |
支持行レベルのロック、改良された同時実行(行ロック有効である場合、非主キーは、テーブル全体をロックする場所でのみ主キー) | ロックテーブル満たす同時挿入する場合、データは、(新しいデータの尾挿入)を挿入することができ、CRUD表ロックを追加するだけのテーブルロックのサポート、ケース |
FULLTEXTのフルテキストインデックスをサポートしていません(プラグインは、より良い性能を達成するために使用することができます) | FULLTEXTサポートフルテキストインデックス |
支持主キーは、無非NULL主キーまたは一意のインデックス場合、自動的に6バイトの主キー(見えない)を生成します | 主キーとインデックスは、インデックスがあり、存在しません |
B +ツリーのリーフノードは、データラインデータに格納されます。 | B +ツリーのリーフノードはデータのアドレスデータに格納されています |
クラスタ化インデックス | 非クラスタ化インデックス |
3.クラスタ化インデックスと非クラスタ化インデックス
3.1クラスタ化インデックス:
- 列データベーステーブルと同じ順序で論理的データ、クラスタ化インデックス高速クエリ速度の物理的な順序。
- シフト操作が多くなりますと、この秩序を維持するためには、毎回、データをデータベーステーブルに挿入されています。
- テーブルは、唯一のクラスタ化インデックスを持つことができます。
3.2非クラスタ化インデックス
- 列データベーステーブルの物理的な順序とデータの挿入、削除、より利便性、論理的順序と一致しません。
- テーブルには、複数の非クラスタ化インデックスを持つことができます
4. B、及びB +ツリーのツリーの違い
Bツリー及びB +木、それは平衡探索木以上で、データベースインデックスに使用されています。
4.1 Bツリー(M-順Bツリー)
- 任意の非リーフノードは、ほとんどのMの息子であり、かつM> 2
- ルートノードK、2の息子<= K <= M、息子の非リーフノードの数であり、P、M / 2(切り上げ)<= P <= M
- キー非リーフノードの数がマイナス1の息子であります
- 同じレベルのすべてのリーフノード
- キーワードツリー全体に分散し、各キーワードは、一つのノードのみに表示されます。
- 検索は、非リーフノードに終わる可能性があり
- 検索のパフォーマンスはバイナリ検索を行うことと等価です
4.2 B +ツリー(M-順序B +ツリー)
B +ツリーは、Bツリーの変更で、クエリのパフォーマンスより良いです
- 非リーフノードは唯一のインデックスとして使用されるデータ、リーフノードに格納されているすべてのデータを保持していないキーワードが含まれています
- すべてのリーフノードは、すべての重要な情報が含まれている、大小規模のリーフノードは、キーワードリストでソート
- B +ツリーは、典型的には、リーフノードの最小を指し、二つのポインタ、ルートノードへのポインタを有しています
- 同じ番号が異なるノードに表示され、ルートノードは、B +ツリー最大要素の最大要素であります
Bツリーの利点に対して4.3 B +ツリー
- 非データのB +ツリーのリーフノードは、記憶されていない複数ページのノードを収容することができるディスク
- B +ツリーは、各リーフノードに対して一度発見されると、B +ツリーはより安定であるので、Bツリーのノードは、いずれかの可能性を有しています
- 直接の範囲を見つけるためにB +ツリーは、リストを横断することができ、およびB-木々が繰り返さツリートラバーサルが必要です
検索時間4.4 B +ツリー
O(Math.log(N、M))
N -レコードの総数
M -順
4つのプロパティの5取引
酸
- アトミック:トランザクションを指し、さまざまな操作がいずれかのすべての失敗を成功するか、すべては、原子操作です
- 一貫性:トランザクションの前と後のデータベースを参照すると、一貫性を確保しなければなりません
- 分離:同時状況を指すが、すべてのユーザのためのトランザクションを作成し、すべてのトランザクションは、トランザクション間の相互分離に互いに干渉することができません
- 永続性:データが外部の原因による失われることはありません、データベースに永続的な変更をトランザクションを指し取り組んでいます。