MySQLデータベースのストレージエンジンInnoDBテーブルとMyIASMについて

MySQLデータベースのストレージエンジンを変更したい場合は、明らかに両方のエンジン、およびは、2つのエンジンの違いを理解していることを理解しなければなりません。

MySQLのデータベースのストレージエンジンは、共通の2をサポートしています。

InnoDBエンジン: ACIDトランザクションデータベースのサポートを提供し、SQL規格は、次の4つの分離レベルを達成します。エンジンはまた、それ自体は実際にMySQLバックエンドに基づいて、完全なデータベースシステムであり、大容量のデータベース・システムを処理するように設計されて、行レベルのロック、および外部キー制約を提供し、MySQLのランタイムInnoDBはメモリ内のバッファ・プールのために作成されますバッファリングデータとインデックス。しかし、エンジンはFULLTEXTインデックス・タイプをサポートしていない、そしてそれは、テーブルの行数を保持していない、とき必要がテーブル全体をスキャンするテーブルからSELECT COUNT(*)。あなたは、データベースのトランザクションを使用する必要がある場合には、エンジンが好まコースです。ロック粒度が小さいのでときに高い並行性、書き込み動作は、効率を改善するInnoDBエンジンを使用して、テーブル全体をロックし、そうしません。MySQLは、SQLステートメントの実装でスキャンする範囲を決定することができない場合は、行レベルのロックは、絶対的ではない、のInnoDBテーブルはまた、テーブル全体をロックします。

MyIASMエンジンは: MySQLのデフォルトのエンジンであるが、INSERT(挿入)またはUPDATE(更新)は、データテーブル全体をロックする必要がある場合には、書き込み動作であるので、それは、行レベルのロック、および外部キーをサポートしていない、データベーストランザクションのサポートを提供しません、効率は低くなります。しかし、異なるとInnoDBは、MyIASMは全表スキャンを必要とせずに直接保存された値を読み取ることがある場合、テーブルからCOUNT(*)を選択し、テーブル内の行に保存されています。テーブルが書き込み操作よりもはるかに読み込まれ、データベース・トランザクション・サポートを必要としない場合は、MyIASMは良い選択です。

主な違い:
1は、MyIASM非トランザクションセキュリティとInnoDBが安全なトランザクションである;
2、MyIASMロック粒度テーブル・レベル、およびInnoDBが行レベルのロックをサポートする;
3、MyIASMテキスト型インデックスは、InnoDBはフルテキストインデックスをサポートしていないサポート。 ;
4、MyIASM比較的単純な、効率がInnoDBは、小さなアプリケーションよりも優れている、MyIASMの使用を検討して、
5を、ファイルフォーマット、クロスプラットフォームに使いやすいMyIASMテーブルを保存します。

アプリケーションのシナリオ:
1、MyIASMは、我々はアプリケーションを選択した場合操作の数を実行し、高速ストレージと検索、および全文検索機能を提供する、非トランザクションテーブルを管理MyIASMの選択すべきである
場合、などの特徴2、ACIDトランザクションのサポートとの取引のためのInnoDBを、挿入および更新操作はInnoDBのを選択する必要があり、多数のアプリケーションを実行します

ビューエンジン情報mysqlデータベース

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
//InnoDB引擎是默认的存储引擎。

支柱は、YESのDEFAULTは、エンジンがデフォルトのエンジンであることを示し、現在のバージョンは、ストレージエンジンをサポートしていることを示しています。NOは、対応するストレージエンジンことを示しています。
システム環境変数default_storage_engineまたはstorage_engineを表示します

mysql> show variables like '%storage_engine%';
+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| default_storage_engine     | InnoDB |
| default_tmp_storage_engine | InnoDB |
| storage_engine             | InnoDB |
+----------------------------+--------+
3 rows in set (0.00 sec)

default_storage_engineは、デフォルトのストレージエンジンによって永久テーブル(永久テーブル)を表します。;
Default_tmp_storage_engineは、デフォルトのストレージエンジン一時テーブルを示します。
storage_engineこのシステム変数は推奨されません、それはシステム変数default_storage_engineに置き換えられました。

デフォルトのMySQLデータベースのストレージエンジンを変更します。

[root@localhost ~]# vim /etc/my.cnf                       //编写mysql服务的主配置文件
               ………………         //省略部分内容,添加如下内容
default-storage-engine=MyISAM
[root@localhost ~]# systemctl restart mysqld            //重新启动mysql服务
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MyISAM             | DEFAULT | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| InnoDB             | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
//再次查看发现MyISAM引擎已经成为默认引擎

直接デフォルトのストレージエンジンMySQLデータベースを変更します

mysql> set default_storage_engine=InnoDB;
Query OK, 0 rows affected (0.00 sec)

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
//再次查看发现InnoDB引擎已经成为默认引擎

このシステム変数default_storage_engineの両方(グローバルおよび一時的)であり、かつ動的に変更することができることに留意されたいです。しかし、再起動が失敗した後、あなたが永続的に変更したい場合は、システム変数default_storage_engineを変更した場合でも、注意してください、それは内部のmy.cnf設定ファイルでデフォルトのストレージエンジンの値を設定するのが最善の方法です。

テーブルで使用されるデフォルトのエンジンを確認

mysql> show create table t1 \G;
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec
//可以看出t1表默认使用的引擎是MyISAM。

デフォルトのストレージエンジンのテーブルを変更します。

mysql> ALTER TABLE t1 ENGINE = InnoDB;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table t1 \G;
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
//可以看出t1表默认使用的引擎是InnoDB。

指定されたストレージエンジンが時にテーブルを作成し
ますが、ストレージエンジンを指定したい場合は、パラメータのみエンジンを設定する必要がある場合、テーブルを作成します。

mysql> create table t2 (id int) engine=InnoDB;
Query OK, 0 rows affected (0.00 sec)

mysql> create table t3 (id int) engine=MyISAM;
Query OK, 0 rows affected (0.00 sec)

おすすめ

転載: www.linuxidc.com/Linux/2019-08/160181.htm