[MySQLの] MySQLの内側:InnoDBテーブルとのMyISAMストレージエンジンの深い理解

入門

MySQLのストレージエンジンはデフォルトでInnoDBの、2つになった後、MyISAMテーブルであるデフォルトのMySQLのストレージエンジンのバージョン5.1の前に、などInnoDBは、MyISAMテーブル、FEDERATED、MEMORY、CSV、を含む、多くのがありますが、一般的に最初の2で使用されていますストレージエンジンを根本的な違いは、それのパフォーマンスに影響を持って、何ですか?この記事では、深さであなたと一緒にこれらの理解を扱っています。

1. InnoDBの

InnoDB 引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。エンジンはまた、それ自体は実際にMySQLバックエンドに基づいて、完全なデータベースシステムであり、大容量のデータベース・システムを処理するように設計されて、行レベルのロック、および外部キー制約を提供し、MySQLのランタイムInnoDBはメモリ内のバッファ・プールのために作成されますデータとインデックスをバッファリングします。しかし、エンジンはFULLTEXTインデックス・タイプをサポートしていない、それが表に行数を保持していないとき必要がテーブル全体をスキャンするテーブルからSELECT COUNT(*)。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。MySQLは、SQLステートメントの実装でスキャンする範囲を決定することができない場合は、行レベルのロックは、絶対的ではない、のInnoDBテーブルはまた、テーブル全体をロックします。

2. MyISAMテーブル

MyISAMテーブルは、データベース・トランザクションのサポートを提供しない行レベルのロックをサポートしていない、および外部キー、INSERT(挿入)またはUPDATE(更新)データ書き込み動作は、テーブル全体をロックする必要があるときに、効率が低くなります。しかし、InnoDBは異なるが、MyISAM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。テーブルが書き込みよりもはるかに読み、データベーストランザクションのサポートを必要としない場合は、MyISAMのは良い選択です。

差分3のInnoDBとMyISAMストレージエンジン

2つのストレージエンジンの違い3.1まとめ

MyISAMテーブルがトランザクションをサポートしていませんが1、InnoDBは、トランザクションをサポートしています。

図2は、InnoDBが行レベルのロックをサポートしており、ロック粒度は、MyISAMテーブルレベルです。

3、InnoDBはフルテキストインデックスFULLTEXT、およびMyISAMのサポートをサポートしていません。

4、行の特定の番号がテーブル保存InnoDBは、SELECT COUNT(*)の実装は、テーブルから、InnoDBはどのように多くの行を計算するために、テーブル全体をスキャンするませんが、MyISAMテーブルは、テーブル内の行の特定の番号を保存し、単に保存を読み出します行の良い数とすることができます。
5、InnoDBは非クラスタ化インデックスのMyISAMながら、インデックスをクラスタ化されました。

3.2クラスタ化インデックスと非クラスタ化インデックスの原則

上記の比較から、使用のInnoDB 聚簇索引のMyISAMはさ非聚簇索引、実際には、両方の非クラスタ化インデックスまたはクラスタ化インデックスはB +ツリー構造で使用されています。B +ツリー構造を示すように:
ここに画像を挿入説明
InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上。あなたが対応するリーフノードを見つけるために、このような条件を見つけるために「WHERE ID = 14」主キー、B +ツリーに従って探索アルゴリズムを使用する場合、データは、行の後に得られました。名前列の条件検索した場合、2つのステップを必要とする:最初の取得主キーに対応するリーフノードに到達補助名のB +ツリーインデックスを検索します。第二のステップは、一次B +ツリーインデックスの主キーを使用してデータの最終的なリーフノード行全体を得るために、別のB +ツリー検索操作を実行します。
MyISAM的是非聚簇索引,B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。非クラスタ化インデックス、主キーのインデックスとセカンダリインデックスの最大の違いは、取得した主キーインデックスキーが一意でなければならないことです。2件のB +ツリー構造のノードからのNO異なる全く同じに見えますが、格納されたコンテンツは、二次鍵を格納するために主キー、二次キーインデックスB +ツリーを格納するノードのプライマリキーインデックスB +ツリー異なる。の非クラスタ化インデックス テーブルデータが別の場所に格納され、これら2つのB +ツリーのリーフノードは差がないこれら二つの鍵、テーブルデータに対して実アドレスポイントテーブルデータを使用しています。インデックスは、ツリーの独立しているため、補助キーを通じて、主キーインデックスツリーにアクセスすることなく、検索。次のように図のルックアッププロセスは、次のとおりです。
ここに画像を挿入説明

4.まとめ

InnoDBは、このようなACIDトランザクションのサポートなどの機能で、トランザクション処理に適しており、アプリケーションにINSERTやUPDATE操作の多くを行う場合は、InnoDBのを選択する必要があり、より多くのSELECT操作ならば、あなたはMyISAMテーブルを考慮する必要があります。

公開された27元の記事 ウォン称賛12 ビュー30000 +

おすすめ

転載: blog.csdn.net/Carson_Chu/article/details/104074966