PHP面接を完了-MySQL基礎知識ポイント整理-ストレージエンジン


MySQL基礎知識ポイント整理-ストレージエンジン
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の特性
  • は、トランザクションをサポートします.
  • は外部キー制約をサポートします.
  • は、行レベルロックメカニズムをサポートします.
  • は、クラッシュ後の安全なリカバリをサポートします.
  • は、いくつかのメカニズムとツールを使用して、本格的なホット・バックアップをサポートします.
  • は、プライマリ・メモリにデータとインデックスをキャッシュするための専用バッファ・プールを確立するため、InnoDBのテーブルにはより多くのメモリとストレージ・スペースが必要です.
  • InnoDBは集約インデックスであり、データファイルはインデックスと結合されており、プライマリ・キーが必要であり、プライマリ・キーによるインデックス効率が高い.ただし、セカンダリ・インデックスには2回のクエリーが必要です.プライマリ・キーにクエリーしてから、プライマリ・キーでデータにクエリーします.したがって、プライマリ・キーは大きすぎるべきではありません.プライマリ・キーが大きすぎるため、他のインデックスも大きくなります.
  • InnoDBはテーブルの具体的な行数を保存せず、select count(*) from tableを実行するには全テーブルスキャンが必要です.

  • InnoDBストレージテーブルとインデックスには2つの方法があります
    共有表領域ストレージの使用:表構造は.frmファイルに保存され、データとインデックスはinnodb_data_home_dirinnodb_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の特性
  • は全文インデックスをサポートします.
  • は表レベルのロックをサポートし、行レベルのロックはサポートされていません.
  • では、トランザクションはサポートされていません.
  • は、より高い挿入、クエリー速度を有します.
  • MyISAMは非集約インデックスで、データファイルは分離され、インデックスはデータファイルのポインタを保存します.プライマリ・キー・インデックスとセカンダリ・インデックスは独立しています.
  • MyISAMは1つの変数でテーブル全体の行数を保存し、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の特性
  • データはすべてメモリに保存されており、ディスク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ファイルデータ表にデータを書き込むと、他のウェブプログラムも迅速にデータを読み取ることができる.