MySQLの高度な記事-MySQLのストレージエンジンについて話します

記事ディレクトリ:

1.ストレージエンジンに関する関連コマンド

2.ストレージエンジンの詳細な紹介

2.1 InnoDB(フォーカス、外部キーをサポートするトランザクションストレージエンジン)

2.2 MyISAM(強調、メインの非トランザクションストレージエンジン)

2.3メモリ(メモリに配置されたテーブル)

2.4アーカイブ(データアーカイブ用)

2.5ブラックホール(書き込み操作を破棄し、読み取り操作は空のコンテンツを返します)

2.6 CSV(データを保存する場合は、データ項目をコンマで区切ります)

2.7フェデレーション(リモートテーブルへのアクセス)

2.8マージ(複数のMyISAMテーブルで構成されるテーブルのセットを管理する)

2.9 NDB(MySQL Cluster Dedicated Storage Engine)

3.ストレージエンジンの比較

4. InnoDBとMyISAMについて(強調)


1.ストレージエンジンに関する関連コマンド

mysqlが提供する ストレージエンジンを確認して ください(ここではmysql5.7を使用しています)

次のコマンドを使用して、主要なストレージエンジンの情報をより詳細に表示することもできます。

デフォルトのストレージエンジンを確認してください。

show variables like '%storage_engine%'; 
#或
SELECT @@default_storage_engine;

もちろん、デフォルトのストレージエンジンも変更します。
テーブルのストレージエンジンがテーブル作成ステートメントで明示的に指定されていない場合、デフォルトでは InnoDBが テーブルのストレージエンジンとして使用されます。テーブルのデフォルトのストレージエンジンを変更する場合は、次のようにサーバーを起動するコマンドラインを記述できます。
SET DEFAULT_STORAGE_ENGINE=MyISAM;
または、 my.cnf ファイルを変更します。
default-storage-engine=MyISAM 

#重启服务 
systemctl restart mysqld
ストレージエンジンは、テーブル内のデータの抽出と書き込みを担当します。テーブルごとに 異なる つまり、テーブルごとに物理ストレージ構造と抽出および書き込み方法を変えることができます。
テーブルを作成する前のステートメントでは、テーブルのストレージエンジンが指定されていなかったため、デフォルトのストレージエンジンである InnoDBが使用され ます。テーブルのストレージエンジンを明示的に指定する場合は、次のように記述できます。
CREATE TABLE 表名( 
    建表语句
) ENGINE = 存储引擎名称;
テーブルがすでに作成されている場合は、次のステートメントを使用してテーブルのストレージエンジンを変更することもできます。
ALTER TABLE 表名 ENGINE = 存储引擎名称;

2.ストレージエンジンの詳細な紹介

2.1 InnoDB(フォーカス、外部キーをサポートするトランザクションストレージエンジン

MySQLには、 3.23.34a 以降の InnoDBストレージエンジンが含まれています。5.5以降では、デフォルトでInnoDBエンジンが使用されます
InnoDB は、 MySQL デフォルトトランザクションエンジン であり、多数の 短期間の トランザクションを処理するように設計されています。トランザクションの完全なコミット (コミット) とロールバック (ロールバック)を保証でき ます。
追加とクエリに加えて、更新と削除の操作も必要になるため、 InnoDB ストレージエンジンを優先する必要があります。
別のストレージエンジンを使用する特別な理由がない限り、 InnoDBエンジンを使用する ことをお勧めし ます。
データファイル構造: table name.frm はテーブル構造を格納します( MySQL 8.0 では、テーブル name.ibdにマージされます ; tablename.ibdはデータとインデックスを格納します。
InnoDB は、膨大なデータ量で最大のパフォーマンスを発揮するように 設計されています 以前のリリースでは、ディクショナリデータはメタデータファイル、非トランザクションテーブルなどに保存されていました。これで、これらのメタデータファイルが削除され ます。例: .frm .par .trn .isl .db.optなどは MySQL8.0 には存在しません
MyISAM ストレージエンジン と比較すると、 InnoDB は書き込み効率が低く 、データとインデックスを保存するためにより多くのディスクスペースを使用します。
MyISAM はインデックスのみをキャッシュし、実際のデータはキャッシュしません。InnoDBはインデックスをキャッシュする だけでなく、大量のメモリ を必要とする 実際のデータもキャッシュ します。メモリのサイズはパフォーマンスに決定的な影響を与えます。

2.2 MyISAM(強調、メインの非トランザクションストレージエンジン

MyISAM は、全文索引付け、圧縮、空間関数 (GIS) などを含む多数の機能を提供しますが、 MyISAM はトランザクション、行レベルのロック、外部キーをサポートしていませ ん。 クラッシュ
5.5 より前のデフォルトのストレージエンジン。
利点は、アクセス 速度が高速であり、トランザクションの整合性や SELECTおよびINSERT に焦点を当てたアプリケーションの要件がないことです
データ統計用の追加の一定のストレージがあります。したがって、 count(*) のクエリ効率は非常に高くなります。
データファイル構造: テーブル 名.frm ストレージテーブル構造 ;テーブル 名.MYD ストレージデータ (MYData) ;テーブル 名.MYI ストレージインデックス (MYIndex)。
アプリケーションシナリオ:読み取り専用アプリケーションまたは読み取りベースのサービス。

2.3メモリ(メモリに配置されたテーブル)

メモリが 使用 するはメモリ です。これ は非常に高速に応答します が、 mysqld デーモンがクラッシュすると、 データが失われ ます。また、保存する必要のあるデータは、データ長が一定の形式です。たとえば、 Blob および Text タイプのデータは使用できません 長さは固定されていません
主な特徴:
        メモリ は、ハッシュ( HASH )インデックス B+ ツリーインデックスの両方をサポートします
メモリテーブルは、 MyISAMテーブルよりも         少なくとも1桁高速 です
        MEMORY テーブル のサイズには制限があります。 テーブルのサイズは、主に max_rows max_heap_table_sizeの2つのパラメーターによって決定されます その中で、 max_rows はテーブルの作成時に指定できます 。max_heap_table_sizeのサイズは デフォルト 16MBであり、必要に応じて拡張できます。
        データファイルは、インデックスファイルとは別に保存されます。
        短所:データが失われやすく、ライフサイクルが短い。この欠陥のため 、MEMORYストレージエンジンを選択する際には特別な注意が必要です。
メモリ ストレージエンジンを使用するシナリオ:
        1. ターゲットデータは比較的小さく 頻繁 され、メモリに保存されます。データが大きすぎると、 メモリ オーバーフローが発生します メモリテーブルのサイズは、パラメータ max_heap_table_sizeで 制御して、 メモリテーブルの最大サイズを制限できます。
        2. データが一時的であり、すぐに利用可能にする 必要がある 場合 は、メモリに配置できます。
3.メモリ テーブル        に保存されているデータが突然失われたかどうかは関係ありません

2.4アーカイブ(データアーカイブ用)

2.5ブラックホール(書き込み操作を破棄し、読み取り操作は空のコンテンツを返します)

2.6 CSV(データを保存する場合は、データ項目をコンマで区切ります)

2.7フェデレーション(リモートテーブルへのアクセス)

2.8マージ(複数のMyISAMテーブルで構成されるテーブルのセットを管理する

2.9 NDBMySQLクラスター専用ストレージエンジン)


3.ストレージエンジンの比較

実際、最も一般的に使用されているのは InnoDB MyISAMであり、 メモリ について言及されることもあり ます。その中で、InnoDBMySQLのデフォルトのストレージエンジンです。

4. InnoDBとMyISAMについて(強調)

多くの人が InnoDB MyISAMのどちらを選択するかについて疑問を持ってい ます。どちらが良いですか?
MySQL 5.5以前のデフォルトのストレージエンジンは MyISAMでしたが5.5以降は InnoDB 変更されました

おすすめ

転載: blog.csdn.net/weixin_43823808/article/details/124099884