1.ストレージエンジンの概要
1.ストレージエンジン(テーブルタイプ)とは
ストレージエンジンについて説明する前に、例えを見てみましょう。実際には、さまざまなタイプのデータファイルを保存し、各ファイルタイプは独自のさまざまな処理メカニズムに対応しています。
-
たとえば、ビデオファイルはmp4、avi、wmvに変換でき、画像はpng、jpgに変換できます。
-
また、コンピュータディスクにはさまざまな種類のファイルシステムがあり、Windowsは一般的なNTFS、FAT32、Linuxはext3、ext4、xfsなどでよく見られます。
-
データベース内のテーブルも異なるタイプである必要があります。テーブルのタイプは異なり、mysqlの異なるアクセスメカニズムに対応します。テーブルタイプはストレージエンジンとも呼ばれます。
2.複数のストレージエンジンがあるのはなぜですか
上記の例えのように、ビデオファイルのタイプは異なりますが、表示されるコンテンツは同じです。
-
テーブルデータについても同様です。テーブルのデータにどのストレージエンジンを使用しても、ユーザーが表示できるデータは同じです。ストレージエンジン、エンジン機能、占有スペース、読み取りパフォーマンス、等
-
率直に言って、ストレージエンジンは、データの保存、データの抽出、データの更新、その他の技術的な方法に関するものです。基本的な実装は異なり、異なるストレージエンジンには、異なるに対応する独自の特徴と機能があることが示されます。アクセスメカニズム
-
それ以来、ユーザーはさまざまなビジネスシナリオに応じてさまざまなストレージエンジンを選択し、MySQLで最も一般的に使用されるストレージエンジンはMyISAMとInnoDBです(詳細は以下を参照)。
-
ps:OracleやSQL Serverなどのデータベースにはストレージエンジンが1つしかなく、すべてのデータストレージ管理メカニズムは同じです。
3.MySQLワークフロー
2.Mysqlの4つのメインストレージエンジン
1.InnoDB
- Mysql5.5以降のデフォルトのストレージエンジン
- 利点:トランザクションをサポートし、行レベルのロックと外部キーの制約により、データのセキュリティが向上します
- 機能:行ロックの設計、外部キーのサポート、およびOracleと同様の非ロック読み取りのサポート。つまり、デフォルトの読み取り操作ではロックが生成されません。
- 短所:MyISAMと比較すると、速度は遅くなりますが、セキュリティは高くなります。
- ストレージ構造:各InnoDB(独自のインデックスを持つインデックスエンジン)は、ディスク上の2つのファイルに保存され、ファイル名とテーブル名は同じです。
t01.frm # 存放的是表结构
t01.idb # 存放的是 索引 + 数据
2.MyISAM
- Mysql5.5より前のデフォルトのストレージエンジン
- 利点:アクセス速度はInnodbよりも高速です
- 短所:トランザクションをサポートしない、外部キーをサポートしない、トランザクションの整合性を必要としない、データセキュリティはInnodbほど高くない
- ストレージ構造:各MyISAMはディスク上に3つのファイルとして保存され、ファイル名とテーブル名は同じです。
t01.frm # 表结构
t01.MYD # MyDaata 存放的是数据
t01.MYI # MyIndex 存放的是索引
3.メモリ
- 利点:メモリストレージを使用すると、データの読み取りが非常に高速になります
- 短所:データベースが再起動またはクラッシュすると、テーブル内のデータが消えます
- ストレージ構造:各メモリは、ファイル名とテーブル名が同じであるディスク上のファイルとして保存されます
t01.frm # 表结构
4.ブラックホール
- 機能:Linuxのdev / nullと同様に、何を保存してもブラックホールは消えます
- アプリケーション:マスタースレーブレプリケーションでディストリビューションマスターライブラリに適用できます
3.MyISAMとInnoDBの違い
1.異なるストレージ構造
- 各MyISAMは、ディスク上に3つのファイルとして保存されます
- 各InnoDBは2つのファイルとしてディスクに保存されます
2.収納スペース
- MyISAMは圧縮可能で、ストレージスペースが小さい
- InnoDBはより多くのメモリとストレージを必要とし、データとインデックスの高速バッファリングのためにメインメモリに専用のバッファプールを確立します
3.物事のサポート
- MyISAMはパフォーマンスを重視し、各クエリはアトミックであり、その実行速度はInnodbタイプよりも高速ですが、トランザクションサポートは提供していません。
- InnoDBは、トランザクションサポート、外部キー、コミット、ロールバック、クラッシュリカバリ機能を備えたトランザクションセーフなACID準拠テーブルなどの高度なデータベース機能を提供します
4.外部キー
- InnoDBは外部キーをサポートしますが、MyISAMはサポートしません
5.操作の追加、削除、変更、およびチェック
- 多数の選択を実行する場合は、MyISAMの方が適しています(行レベルのロックをサポートしていないため)。追加および削除するときは、テーブル全体をロックする必要がありますが、これは効率が低くなります。InnoDBは行レベルのロックをサポートします。。これをロックする必要があるのは、削除および挿入するときだけです。ロックするだけで、効率が向上します。
- データが多数の挿入または更新を実行する場合、パフォーマンス上の理由から、InnoDBテーブルを使用する必要があり、パフォーマンスの点でInnodbの削除の方が優れています
- ただし
delete from table
、InnoDBはテーブルを再作成しませんが、1行ずつ削除します。InnoDB上の大量のデータを含むテーブルを空にする場合は、truncate table
このコマンドを使用するのが最適です。
6.アプリケーション
- MyISAMは、クエリおよび挿入ベースのアプリケーションに適しています
- InnoDBは、頻繁な変更や高度なセキュリティを伴うアプリケーションに適しています
4.その他のストレージエンジン(理解)
5.NDBストレージエンジン
2003年、MySQLABはSonyEricssonからNDBストレージエンジンを買収しました。NDBストレージエンジンは、OracleのRACクラスタに似たクラスタストレージエンジンですが、Oracle RACのシェアードナッシング構造とは異なり、その構造はシェアードナッシングクラスタアーキテクチャであるため、より高いレベルの高可用性を提供できます。NDBストレージエンジンの機能は、すべてのデータがメモリに保存されることです(バージョン5.1以降、インデックス付けされていないデータをディスクに配置できます)。そのため、主キーの検索が非常に高速になり、NDBデータストレージノードをオンラインで追加できます。 (データノード)データベースのパフォーマンスを直線的に向上させるため。NDBストレージエンジンは、高可用性、高性能、高スケーラビリティを備えたデータベースクラスタシステムであり、OLTPデータベースアプリケーションを対象としていることがわかります。
6.Infobrightストレージエンジン
サードパーティのストレージエンジン。その特徴は、ストレージが行ではなく列に基づいているため、OLAPデータベースアプリケーションに非常に適していることです。その公式ウェブサイトはhttp://www.infobright.org/であり、分析のための多くの成功したデータウェアハウスの事例があります。
7.NTSEストレージエンジン
NetEaseが内部使用のために開発したストレージエンジン。現在のバージョンはトランザクションをサポートしていませんが、圧縮や行レベルのキャッシュなどの機能を提供しています。メモリ指向のトランザクションサポートは近い将来実装される予定です。
ps:Mysqlは多くのストレージエンジンをサポートしています。上記は一般的なストレージエンジンであり、カスタマイズもサポートしています。つまり、自分で作成します。
V.さまざまなストレージエンジンの使用の比較
1.ストレージエンジンを表示する
show engines; # 查看安装的mysql所有支持的存储引擎
show variables like 'storage_engine%'; # 查看当前正在使用的存储引擎
2.さまざまなテーブルを作成し、さまざまなストレージエンジンを指定します
create table innodb_t01(id int) engine=innodb; # 末尾指定InnoDB存储引擎
create table myisam_t02(id int) engine=myisam; # 指定MyISAM存储引擎
create table memory_t03(id int) engine=memory; # 指定memory存储引擎
create table blackhole_t04(id int) engine=blackhole; # 指定Blackhole存储引擎
3.4つのテーブルにそれぞれデータを挿入します
insert into innodb_t01 values(1),(2); # 插入 ID 1 和 2 ,下同
insert into myisam_t02 values(1),(2);
insert into memory_t03 values(1),(2);
insert into blackhole_t04 values(1),(2);
4.4つのテーブルのコンテンツの変更を表示します
select * from innodb_t01;
select * from myisam_t02;
select * from memory_t03;
select * from blackhole_t04; # 注意 : 黑洞
結論:ブラックホールタイプのテーブルの場合、テーブルにデータを挿入することは、ブラックホールにスローすることと同じであり、テーブルにレコードが存在することはありません。
5. Mysqldを再起動して、メモリテーブルの変更を表示します
- mysqlを再起動します
- memory_t03テーブルをもう一度確認してください
結論:メモリタイプテーブルの場合、mysqlを再起動するか、マシンを再起動すると、テーブル内のデータがクリアされます
6.テーブルの詳細な操作
次の記事では、テーブルの操作について詳しく説明します。