PHP面接を完了-MySQL基礎知識ポイント整理-ストレージエンジン
MySQL基礎知識ポイント整理-ストレージエンジン
0.MySQLがサポートするストレージエンジンの表示
mysqlクライアントでは、
1.InnoDBエンジン
InnoDBはMySQLのデフォルトのストレージエンジンであり、最も重要で、最も広く使用されているストレージエンジンでもあります.InnoDBのパフォーマンスと自動クラッシュ・リカバリ機能により、非トランザクション・ストレージのニーズにも人気があります.他のストレージエンジンを使用する必要がある特別な理由がない限り、InnoDBエンジンを優先的に考慮する必要があります.
InnoDBの特性は、トランザクションをサポートします. は外部キー制約をサポートします. は、行レベルロックメカニズムをサポートします. は、クラッシュ後の安全なリカバリをサポートします. は、いくつかのメカニズムとツールを使用して、本格的なホット・バックアップをサポートします. は、プライマリ・メモリにデータとインデックスをキャッシュするための専用バッファ・プールを確立するため、InnoDBのテーブルにはより多くのメモリとストレージ・スペースが必要です. InnoDBは集約インデックスであり、データファイルはインデックスと結合されており、プライマリ・キーが必要であり、プライマリ・キーによるインデックス効率が高い.ただし、セカンダリ・インデックスには2回のクエリーが必要です.プライマリ・キーにクエリーしてから、プライマリ・キーでデータにクエリーします.したがって、プライマリ・キーは大きすぎるべきではありません.プライマリ・キーが大きすぎるため、他のインデックスも大きくなります. InnoDBはテーブルの具体的な行数を保存せず、
InnoDBストレージテーブルとインデックスには2つの方法があります
共有表領域ストレージの使用:表構造は
InnoDBの使用シーン
更新が密集しているテーブル:InnoDBストレージエンジンは、多重同時更新要求を処理するのに特に適しています.トランザクション:InnoDBストレージエンジンは、トランザクションをサポートする標準MySQLストレージエンジンです.自動ディザスタリカバリ:InnoDBテーブルはディザスタリカバリから自動的にリカバリされます.外部キー制約:MySQLが外部キーをサポートするストレージエンジンはInnoDBのみです.自動増設列AUTO_をサポートINCREMENTプロパティ.
2.MyISAMエンジン
MyISAMは、MySQL 5.1以降のデフォルトのストレージエンジンです.MySQL 8はMyISAMエンジンを廃棄します.MyISAMは全文インデックス,圧縮,空間関数(GIS)などの特性を提供する.MyISAMはトランザクションとロー・レベルのロックをサポートしていません.クラッシュ後、安全にリカバリできません.
MyISAMの特性は全文インデックスをサポートします. は表レベルのロックをサポートし、行レベルのロックはサポートされていません. では、トランザクションはサポートされていません. は、より高い挿入、クエリー速度を有します. MyISAMは非集約インデックスで、データファイルは分離され、インデックスはデータファイルのポインタを保存します.プライマリ・キー・インデックスとセカンダリ・インデックスは独立しています. MyISAMは1つの変数でテーブル全体の行数を保存し、
MyISAMの3種類のストレージフォーマット
MyISAMの3つのストレージフォーマットは、それぞれ静的、動的、圧縮である.MyISAMは、テーブルの定義に従って自動的にストレージフォーマットを選択します.
静的テーブル:データテーブルの各データ列の長さが予め固定されている場合、サーバは自動的にこのテーブルタイプを選択します.データ・テーブルの各レコードに使用されるスペースは同じであるため、このテーブルのアクセスと更新の効率は非常に高い.データが破損した場合、リカバリ作業も容易になります.≪ダイナミック・テーブル|Dynamic Table|emdw≫:データ・テーブルに
MyISAMテーブルストレージ
各MyISAMテーブルはディスク上に3つのファイルとして格納され、各ファイルの名前はテーブルの名前で始まり、拡張子はファイルタイプを示します.
MyISAM使用シーン
クエリー密集型テーブル:MyISAMストレージエンジンは大量のデータをフィルタリングするのが非常に速く、最も際立った利点である.密なテーブルの挿入:MyISAMの同時挿入機能により、同時にデータを選択、挿入できます.たとえば、MyISAMストレージエンジンは、メールやWebサーバのログデータの管理に適しています.
3.MEMORYエンジン
MEMORYエンジン(HEAPエンジンとも呼ばれる)は、すべてのデータをメモリに保存し、ディスクI/Oを行う必要はありません.従って、MEMORYテーブルは少なくともMyISAMテーブルより1桁速い.MySQLが再起動したりmysqldデーモンがクラッシュしたりすると、Memoryテーブルの構造は保持されますが、すべてのデータが失われます.
速度を得ると同時にいくつかの欠陥をもたらす.Memoryデータテーブルに格納されているデータには長さ不変のフォーマットが必要であり、これはBLOBやTEXTのような長さ可変のデータ型は使用できないことを意味し、VARCHARは長さ可変のタイプであるが、MySQL内部では長さ固定不変のCHARタイプとして使用できるためである.
MEMORYの特性データはすべてメモリに保存されており、ディスクI/Oは不要です. は、HashインデックスおよびBツリーインデックスをサポートします. は表レベルのロックをサポートし、行レベルのロックはサポートされていません. サービスが再起動されると、テーブル構造は保持されますが、データは失われます. では、TEXTおよびBLOBタイプのカラムはサポートされていません.
MEMORY使用シーンは、データに迅速にアクセスする必要があり、これらのデータは変更されず、再起動後に紛失しても構わない. は、例えば、郵便番号およびアドレスをマッピングするテーブルなどのテーブルを検索またはマッピングするために使用される. は、データ分析で生成された中間データを保存するために使用される. は、周期的な集約データの結果をキャッシュするために使用される.
4.ARCHIVEエンジン
ARCHIVEエンジンは、挿入と圧縮を最適化した簡単なストレージエンジンです.ARCHIVEエンジンはINSERTとSELECT操作のみをサポートします.MySQL 5.1以前もインデックスはサポートされていませんでした.ARCHIVEエンジンは、挿入された行をzlibで圧縮するため、MyISAMテーブルのディスクI/Oよりも少ない.
ARCHIVEの特性はINSERTおよびSELECT操作のみをサポートします. MySQL 5.1以前はインデックスはサポートされていませんでした. は、行レベルロックおよび専用バッファをサポートします.
ARCHIVE使用シーンはログとデータ収集クラスのアプリケーションに適しており、このようなアプリケーションはデータ分析を行う際に全表スキャンを必要とすることが多い. クイックINSERT操作が必要なシーン.
5.MERGEエンジン
MERGEストレージエンジンはMyISAMエンジンの変種です.MERGEテーブルは、複数のMyISAMテーブルが統合された仮想テーブルであり、これらのMyISAMテーブル構造は完全に同じでなければならない.Mergeテーブルにはデータがありません.Mergeタイプのテーブルに対してクエリー、更新、削除操作を行うことができます.これらの操作は実際には内部のMyISAMテーブルに対して操作を行います.
Mergeストレージエンジンは、サーバログに対するシーンという情報を使用しており、一般的に一般的に一般的に使用されるストレージポリシーは、データを特定の時間に関連付けて多くのテーブルに分割することです.たとえば、サーバのログ・データは12個の同じテーブルで格納でき、各テーブルは各月の名前で命名されます.12個のログ・テーブルのすべてのデータに基づいてレポートを生成する必要がある場合、これは、これらのテーブルの情報を反映するために複数のテーブル・クエリーを作成、更新する必要があることを意味します.エラーが発生する可能性のあるクエリーを作成するよりも、これらのテーブルを統合してクエリーを使用し、元のデータに影響を与えることなくMergeテーブルを削除します.Mergeテーブルを削除すると、Mergeテーブルの定義だけが削除され、内部テーブルには影響がありません.
しかし、パーティション機能を導入すると、エンジンは放棄された.
6.CSVエンジン
CSVエンジンは、通常のCSVファイルをMySQLのテーブルとして扱うことができますが、インデックスはサポートされていません.
CSVの特徴は、通常のCSVファイルをMySQLのテーブルとして扱うことができる. すべての列はNULLではない でなければなりません.インデックスはサポートされていません(大きなテーブルには適さず、オンライン処理には適さない) データファイルを直接編集(テキストファイルの内容を保存)できる CSV使用シーンデータ交換に適した中間表(サーバの実行時にファイルをコピーコピーコピーコピーコピーしコピーすることができ、スプレッドシートをCSVファイルとして保存してMySQLデータディレクトリの下にコピーすることができ、データベースで開くことができ、使用することができる.同様にCSVファイルデータ表にデータを書き込むと、他のウェブプログラムも迅速にデータを読み取ることができる.
0.MySQLがサポートするストレージエンジンの表示
mysqlクライアントでは、
show engines;
コマンドを使用してMySQLでサポートされているエンジンを表示できます.mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | 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 |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.06 sec)
1.InnoDBエンジン
InnoDBはMySQLのデフォルトのストレージエンジンであり、最も重要で、最も広く使用されているストレージエンジンでもあります.InnoDBのパフォーマンスと自動クラッシュ・リカバリ機能により、非トランザクション・ストレージのニーズにも人気があります.他のストレージエンジンを使用する必要がある特別な理由がない限り、InnoDBエンジンを優先的に考慮する必要があります.
InnoDBの特性
select count(*) from table
を実行するには全テーブルスキャンが必要です.InnoDBストレージテーブルとインデックスには2つの方法があります
共有表領域ストレージの使用:表構造は
.frm
ファイルに保存され、データとインデックスはinnodb_data_home_dir
とinnodb_data_file_path
で定義された表領域にあり、複数のファイルであってもよい.≪マルチ表領域ストレージの使用|Use Multi Tablespace Storage|emdw≫:表構造は.frm
ファイルに保存され、各表のデータとインデックスは.ibd
に個別に保存されます.InnoDBの使用シーン
更新が密集しているテーブル:InnoDBストレージエンジンは、多重同時更新要求を処理するのに特に適しています.トランザクション:InnoDBストレージエンジンは、トランザクションをサポートする標準MySQLストレージエンジンです.自動ディザスタリカバリ:InnoDBテーブルはディザスタリカバリから自動的にリカバリされます.外部キー制約:MySQLが外部キーをサポートするストレージエンジンはInnoDBのみです.自動増設列AUTO_をサポートINCREMENTプロパティ.
2.MyISAMエンジン
MyISAMは、MySQL 5.1以降のデフォルトのストレージエンジンです.MySQL 8はMyISAMエンジンを廃棄します.MyISAMは全文インデックス,圧縮,空間関数(GIS)などの特性を提供する.MyISAMはトランザクションとロー・レベルのロックをサポートしていません.クラッシュ後、安全にリカバリできません.
MyISAMの特性
select count(*) from table
を実行するとその変数を読み出すだけで速くなります.MyISAMの3種類のストレージフォーマット
MyISAMの3つのストレージフォーマットは、それぞれ静的、動的、圧縮である.MyISAMは、テーブルの定義に従って自動的にストレージフォーマットを選択します.
静的テーブル:データテーブルの各データ列の長さが予め固定されている場合、サーバは自動的にこのテーブルタイプを選択します.データ・テーブルの各レコードに使用されるスペースは同じであるため、このテーブルのアクセスと更新の効率は非常に高い.データが破損した場合、リカバリ作業も容易になります.≪ダイナミック・テーブル|Dynamic Table|emdw≫:データ・テーブルに
varchar
、*text
、または*BLOB
のフィールドが表示されると、サーバはこのテーブル・タイプを自動的に選択します.静的MyISAMに対しては、このようなテーブルの記憶領域は比較的小さいが、記録ごとに長さが異なるため、データを複数回変更すると、データテーブルのデータがメモリに離散的に記憶され、実行効率が低下する可能性がある.同時に、メモリに多くの破片が発生する可能性があります.したがって、このタイプのテーブルは、常にoptimize table
コマンドまたは最適化ツールを使用してフラグメント化されます.圧縮テーブル:上記の2種類のテーブルはmyisamchkツールで圧縮できます.このようなテーブルは、テーブルが作成されてデータがインポートされた後に変更されていない場合、MyISAM圧縮テーブルを使用するのに適しています.このタイプのテーブルは、消費されるストレージをさらに低減しますが、このタイプのテーブルは圧縮されてから変更できません.また,圧縮データであるため,このようなテーブルは読み出し時にまず時行解凍しなければならない.MyISAMテーブルストレージ
各MyISAMテーブルはディスク上に3つのファイルとして格納され、各ファイルの名前はテーブルの名前で始まり、拡張子はファイルタイプを示します.
.frm
ファイルはテーブル構造定義を格納します..MYD
(MYData)ファイルは、テーブルのデータを格納します..MYI
(MYIndex)ファイルは、テーブルのインデックスを格納します.MyISAM使用シーン
クエリー密集型テーブル:MyISAMストレージエンジンは大量のデータをフィルタリングするのが非常に速く、最も際立った利点である.密なテーブルの挿入:MyISAMの同時挿入機能により、同時にデータを選択、挿入できます.たとえば、MyISAMストレージエンジンは、メールやWebサーバのログデータの管理に適しています.
3.MEMORYエンジン
MEMORYエンジン(HEAPエンジンとも呼ばれる)は、すべてのデータをメモリに保存し、ディスクI/Oを行う必要はありません.従って、MEMORYテーブルは少なくともMyISAMテーブルより1桁速い.MySQLが再起動したりmysqldデーモンがクラッシュしたりすると、Memoryテーブルの構造は保持されますが、すべてのデータが失われます.
速度を得ると同時にいくつかの欠陥をもたらす.Memoryデータテーブルに格納されているデータには長さ不変のフォーマットが必要であり、これはBLOBやTEXTのような長さ可変のデータ型は使用できないことを意味し、VARCHARは長さ可変のタイプであるが、MySQL内部では長さ固定不変のCHARタイプとして使用できるためである.
MEMORYの特性
MEMORY使用シーン
4.ARCHIVEエンジン
ARCHIVEエンジンは、挿入と圧縮を最適化した簡単なストレージエンジンです.ARCHIVEエンジンはINSERTとSELECT操作のみをサポートします.MySQL 5.1以前もインデックスはサポートされていませんでした.ARCHIVEエンジンは、挿入された行をzlibで圧縮するため、MyISAMテーブルのディスクI/Oよりも少ない.
ARCHIVEの特性
ARCHIVE使用シーン
5.MERGEエンジン
MERGEストレージエンジンはMyISAMエンジンの変種です.MERGEテーブルは、複数のMyISAMテーブルが統合された仮想テーブルであり、これらのMyISAMテーブル構造は完全に同じでなければならない.Mergeテーブルにはデータがありません.Mergeタイプのテーブルに対してクエリー、更新、削除操作を行うことができます.これらの操作は実際には内部のMyISAMテーブルに対して操作を行います.
Mergeストレージエンジンは、サーバログに対するシーンという情報を使用しており、一般的に一般的に一般的に使用されるストレージポリシーは、データを特定の時間に関連付けて多くのテーブルに分割することです.たとえば、サーバのログ・データは12個の同じテーブルで格納でき、各テーブルは各月の名前で命名されます.12個のログ・テーブルのすべてのデータに基づいてレポートを生成する必要がある場合、これは、これらのテーブルの情報を反映するために複数のテーブル・クエリーを作成、更新する必要があることを意味します.エラーが発生する可能性のあるクエリーを作成するよりも、これらのテーブルを統合してクエリーを使用し、元のデータに影響を与えることなくMergeテーブルを削除します.Mergeテーブルを削除すると、Mergeテーブルの定義だけが削除され、内部テーブルには影響がありません.
しかし、パーティション機能を導入すると、エンジンは放棄された.
6.CSVエンジン
CSVエンジンは、通常のCSVファイルをMySQLのテーブルとして扱うことができますが、インデックスはサポートされていません.
CSVの特徴