ホームページ  >  記事  >  バックエンド開発  >  MyISAM と InnoDB の違い

MyISAM と InnoDB の違い

WBOY
WBOYオリジナル
2016-07-28 08:29:421078ブラウズ

テーブルMyISAMから単純にcount(*)を選択しますcount(*) ステートメントに where 条件が含まれている場合、2 つのテーブルの操作は同じであることに注意してください InnoDB はテーブル内の特定の行数を保存しません。つまり、テーブルから select count(*) を実行します。テーブル全体をスキャンして行数を計算する必要がありますテーブルロックは行ロックを提供し、ロックフリーを提供しますさらに、InnoDB テーブルの行ロックは絶対的ではありません。Mysql が SQL ステートメントの実行時にスキャン範囲を決定できない場合、InnoDB はテーブル全体をロックしますB+tree。 b-tree または btree

MyISAM

InnoDB

それぞれの

MyISAM はディスク上に 3 つのファイルを保存します。最初のファイル名はテーブル名で始まります。拡張子はファイルを示しますtype

.frmファイル格納テーブル定義

データファイルの拡張子は.MYD(MYData)です

インデックスファイルの拡張子は.MYI(MYIndex)です

Disk-ベースのリソースは、InnoDB テーブル スペース データ ファイルとそのログ ファイルです。InnoDB テーブルのサイズは、オペレーティング システム ファイルのサイズによってのみ制限されます。通常は 2 GB です

トランザクション処理

。 MyISAM タイプのテーブルはパフォーマンスを重視しており、その実行速度は InnoDB タイプよりも高速ですが、トランザクションのサポートは提供しません

InnoDB はトランザクションを提供し、トランザクション、外部キー、その他の高度なデータベース機能をサポートします

追加、削除、変更、クエリ操作
を実行する場合 多数の選択の場合は、MyISAM がより良い選択肢です

1. パフォーマンス上の理由から、データに大量の挿入と更新を実行する必要がある場合は、次のようにする必要があります。 InnoDB テーブルを使用します

2. テーブルから削除する場合、InnoDB は再作成されませんが、行ごとに削除されます
3. 解決策は、最初に InnoDB を変更することです。 InnoDB テーブルを MyISAM テーブルに変換し、データをインポートしてから InnoDB テーブルに変更します。ただし、InnoDB 機能 (外部キーなど) を使用するテーブルには適用されません

主キーの自動インクリメントの操作
テーブルごとの auto_increment カラムの内部処理

MyISAM は挿入および更新操作のために自動的に実行されます このカラムを更新すると、主キーカラムが高速化されます (最低 10%)
auto_increment は alter と myisamchk によってリセットできます

型のフィールドの場合

auto_increment、InnoDB にはそのフィールドのみのインデックスが含まれている必要がありますが、myisam テーブルの場合は、他のフィールドを含む first-sum インデックスを作成できます

auto_increment の処理がより良く、より高速になります

テーブルの場合、データ ディクショナリの InnoDB テーブル ハンドルには、カラムに新しい値を割り当てるために使用される Counter と呼ばれる auto_increment カウンターが含まれています。

自動インクリメントカウンターはディスクではなくメインメモリにのみ保存されます

テーブル内の特定の行数

Lock

上記では、関連する側面を含め、MyISAM と InnoDB の違いを紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。