学習の元のアドレス:
https://blog.csdn.net/qushaming/article/details/82773783
MySQLストレージエンジンの特性と選択について
基本的な考え方は、MyISAMエンジンは単純な挿入および選択システムにより適しているということです。システムが頻繁に更新および削除されない場合は、このストレージエンジンの使用を検討できます。
ただし、データ整合性トランザクションの要件が比較的高く、更新要件が多い場合は、InnoDBをお勧めします。
最初の結論の提案を引用する:
MyISAM:アプリケーションが読み取り操作と挿入操作に基づいており、更新操作と削除操作がほとんどなく、トランザクションの整合性と同時実行性の要件がそれほど高くない場合、このストレージエンジンは非常に適しています。MyISAMは、Web、データウェアハウス、その他のアプリケーション環境で最も一般的に使用されるストレージエンジンの1つです。
InnoDB:トランザクション処理アプリケーションに使用され、外部キーをサポートします。アプリケーションのトランザクションの整合性に対する要件が比較的高く、同時条件下でのデータの一貫性が必要な場合、データ操作には挿入とクエリに加えて多くの更新と削除の操作が含まれるため、InnoDBストレージエンジンがより適切な選択です。 。InnoDBストレージエンジンは、削除と更新によるロックを効果的に削減するだけでなく、トランザクションの完全なコミットとロールバックも保証します。課金システムや金融システムなど、高いデータ精度を必要とするシステムでは、 InnoDBは適切な選択です。
メモリ:すべてのデータをRAMに保存し、高速なロケーションレコードやその他の同様のデータが必要な環境で非常に高速なアクセスを提供します。MEMORYの欠点は、テーブルのサイズに制限があることです。大きすぎるテーブルはメモリにキャッシュできません。次に、テーブルのデータを確実に復元できるようにする必要があります。テーブルのデータは、データベースの異常終了後に復元できます。MEMORYテーブルは通常、頻繁に更新されない小さなテーブルを更新して結果にすばやくアクセスするために使用されます。
MERGE:一連の同等のMyISAMテーブルを論理的に組み合わせ、それらをオブジェクトとして参照するために使用されます。MERGEテーブルの利点は、単一のMyISAMテーブルのサイズの制限を打破し、複数のディスクに異なるテーブルを分散することによって可能です。上記により、MERGEテーブルのアクセス効率を効果的に改善できます。これは、データウェアハウスなどのVLDB環境に非常に適しています。
ストレージエンジンの指定方法
ストレージエンジンには、データベースのインストール時にデフォルト設定がありますが、個別のテーブルに異なるストレージエンジンを指定することもできます。
データテーブルのストレージエンジンを指定します。デモテーブルは次のとおりです。中央のキーワードに注意してください。ENGINE = MyISAM:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for epa_monit_alarm_data_myisam
-- ----------------------------
DROP TABLE IF EXISTS `epa_monit_alarm_data_myisam`;
CREATE TABLE `epa_monit_alarm_data_myisam` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '唯一`yanru_test`主键',
`alarm_status` int(0) NULL DEFAULT NULL COMMENT '是否报警,为1表示报警,为0表示解除报警',LT NULL COMMENT '压力/真空阀状态(0、1、2、N)',
`critical_pressure_state` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '压力/真空阀临界压力状态(0、1、2、N)',
`post_processing_device_status` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '后处理装置状态(0、1、2、N)',
PRIMARY KEY (`id`) USING BTREE,
INDEX `ids_alarm_status`(`alarm_status`) USING BTREE,
INDEX `ids_enterprise_code`(`enterprise_code`) USING BTREE,
INDEX `ids_tanker_id`(`tanker_id`) USING BTREE,
INDEX `ids_date`(`date`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 642 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '采集加油站数据:加油站相关的报警预警数据' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
ストレージエンジン挿入速度の比較テスト
2つのストレージエンジンMyISAMとInnoDBについて、それぞれいくつかのパフォーマンステストを行いました。
1000個のデータの挿入を例にとると、MyISAMはInnoDBの時間の96%を占めます。
MyISAMテーブルの実行には時間がかかる | InnoDBテーブルの実行には時間がかかる |
---|---|
117.117s | 122.289s |
例として100,000個のデータを挿入すると、MyISAMはInnoDBの時間の99%を占めます。
MyISAMテーブルの実行には時間がかかる | InnoDBテーブルの実行には時間がかかる |
---|---|
12078.579s | 12179.141s |
それを計算し、それを瞬時のサンプリングと比較し、
包括的な比較では、MyISAMを使用した全体的な挿入効率は、実際にはInnoDBよりも高速ではないことがわかります。したがって、これら2つのストレージエンジンの選択は、データ挿入速度の要求に依存しません。