MySQLストレージエンジン学習ノート

2839 ワード

現在サポートされているストレージエンジンを表示します.
show engines

データテーブルのストレージエンジンの指定
create table mytb {
  id int primary key,
  name varchar(100)
} type=InnoDB //      

alter table mytb type=MyISAM //      

MySQLがサポートするストレージエンジン
Engine
Support
Comment
Transactions
XA
Savepoints
MRG_MyISAM
YES
Collection of identical MyISAM tables
NO
NO
NO
CSV
YES
CSV storage engine
NO
NO
NO
MEMORY
YES
Hash based, stored in memory, useful for temporary tables
NO
NO
NO
BLACKHOLE
YES
/dev/null storage engine (anything you write to it disappears)
NO
NO
NO
MyISAM
YES
MyISAM storage engine
NO
NO
NO
FEDERATED
YES
FederatedX pluggable storage engine
YES
NO
YES
ARCHIVE
YES
Archive storage engine
NO
NO
NO
InnoDB
DEFAULT
Percona-XtraDB, Supports transactions, row-level locking, and foreign keys
YES
YES
YES
PERFORMANCE_SCHEMA
YES
Performance Schema
NO
NO
NO
Aria
YES
Crash-safe tables with MyISAM heritage
NO
NO
NO
InnoDB VS MyISAM
プロジェクトの比較
InnoDB(MySQLデフォルト)
MyISAM
取引
サポート*START TRANSACTION;INSERT... UPDATE... COMMIT; *
サポートなしで高速
ロックメカニズム
ロー・ロックはinsert/updateを多数サポートし、より効果的です.
表ロックは大量のselect効果をサポートするより良い
クエリの行数
行数を保存しない
保存行数select count(*)直接戻り
ぶつりてきこうぞう
テーブルごとに1つのファイルに対応
各テーブルには3つのファイルが対応しています
自己成長ID
現在の最大IDをメモリに入れる
現在の最大IDをファイルに入れる
InnoDBは、高同時インターネットシーンで最も推奨されるストレージエンジンです.詳細は、MySQL InnoDB同時制御、トランザクションの実装学習ノートを参照してください.
いくつかの補足、参照:InnoDB、5つのベストプラクティス、それを知っていますか?
  • count(*):MyISAMについては総行数が直接格納され、InnoDBではなく、行単位でスキャンする必要があります.注意:MyISAMは、全テーブルの合計ロー数をクエリーするだけで結果を直接返します.whereの条件が追加されると、2つのストレージエンジンの処理方法は似ています.
  • 全文インデックスについて:MyISAMは全文インデックスをサポートし、InnoDB 5.6は全文インデックスをサポートしていない.
  • 外部キーについて:MyISAMは外部キーをサポートせず、InnoDBは外部キーをサポートする.注意:どのストレージエンジンでも、データ量が大きい同時性が大きい場合は、外部キーを使用するのではなく、アプリケーションによって完全性を保証することをお勧めします.
  • ロー・ロックとテーブル・ロックについて:MyISAMはテーブル・ロックのみをサポートし、InnoDBはロー・ロックをサポートします.
  • MyISAM:SQL文の読み書きを実行すると、テーブルにロックがかけられるため、データ量が多く、同時量が高いとパフォーマンスが急激に低下します.
  • InnoDB:細粒度行ロックは、データ量が大きく、同時量が高い場合、性能が優れている.
  • InnoDBのロー・ロックは、物理ロー・レコードにロックされるのではなく、インデックスに実装される.潜在的なセリフは、アクセスにヒットインデックスがなく、ロー・ロックも使用できない場合、テーブル・ロックに劣化します.


  • たとえば、t_user(uid PK, uname, age, sex) innodb; update t_user set age=10 where uid=1;ヒットインデックス、ローロック.update t_user set age=10 where uid != 1;インデックス、テーブルロックにヒットしませんでした.update t_user set age=10 where name='shenjian';インデックスなし、テーブルロック.