查看mysql引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
show engines命令可以查看mysql支持的引擎,我测试的版本是5.7,默认采用innodb引擎,5.5之后的版本默认采用innodb引擎,而5.5之前默认采用myisam引擎。此次内容讲解memory、csv、Archive引擎。
1.memory引擎
可以在上面的表格中看出来,
Hash based, stored in memory, useful for temporary tables
基于hash,存储在内存中,适用于临时表格,不支持事务,不支持保存点,不支持XA事务(两阶段提交)
我们创建一个test_memory的表格,
mysql> show variables like '%datadir%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.03 sec)
mysql> create table test_memory(
-> id int unsigned auto_increment key,
-> name varchar(30) not null unique)engine=memory charset=utf8;
Query OK, 0 rows affected (0.02 sec)
–然后进入目录/var/lib/mysql/对应的数据库目录下查看,可以看到只有一个test_memory.frm表格文件,每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,可以释放内存,甚至删除不需要的表。
MEMORY默认使用哈希索引,查询速度比使用B型树索引快,如果对于范围查询或者排序,速度比B树索引慢很多,这个是因为哈希的数据结构性质决定的。当然如果你想用B型树索引,可以在创建索引时指定。在使用上也有一定限制,只是支持表锁,并发性能差,并且不支持text和blob类型,而且存储边长字符串varchar时按照char的方式进行的,因此会浪费内存。
2.csv引擎
从show engines可以看到,csv引擎,不支持事务,不支持保存点,不支持XA事务(两阶段提交)。不支持索引,不支持为空的列,创建一个test_csv的表格试试,
create table test_csv( id int unsigned not null, email varchar(50) not null default '123222@126.com') engine=csv charset=utf8;
Query OK, 0 rows affected (0.00 sec)
--mysql目录下面的文件
-rw-r----- 1 mysql mysql 35 Aug 13 14:59 test_csv.CSM
-rw-r----- 1 mysql mysql 0 Aug 13 14:59 test_csv.CSV
-rw-r----- 1 mysql mysql 8588 Aug 13 14:59 test_csv.frm
可以看到增加了三个文件,test_csv.frm是熟悉的表格文件,test_csv.csv是数据文件,就是常用的以逗号为分隔符的表格文件,使用表格编辑器或者文本编辑器直接打开编辑,但是对数据库来说,不建议这么操作,因为单独操作数据文件,会使得数据库内部保存的某些不一致,test_csv.csm这个不了解。
3.Archive引擎
Archive引擎适用于数据归档,不支持事务,不支持保存点,不支持XA事务(两阶段提交)。
mysql> create table test_archive( id int unsigned auto_increment key, name varchar(30) not null default 'xusi' )engine=archive charset=utf8;
Query OK, 0 rows affected (0.01 sec)
--查看mysql目录下面的文件
-rw-r----- 1 mysql mysql 8674 Aug 13 18:00 test_archive.ARZ
-rw-r----- 1 mysql mysql 8586 Aug 13 18:00 test_archive.frm
--我们下面简单测试一下archive引擎的压缩情况,
统一创建(id int unsigned auto_increment key, name varchar(30) not null default 'ab') charset=utf8;的格式的表格,插入name中一样的数据
insert to test_*(name) values('ab'); --*表示不同的引擎名称,用以区别引擎的表格
--可以看到archive引擎的数据文件大小比innodb引擎还有myisam引擎小很多,
--archive引擎生成的文件
-rw-r----- 1 mysql mysql 3005748 Aug 15 09:27 test_archive.ARZ
-rw-r----- 1 mysql mysql 8586 Aug 13 18:00 test_archive.frm
--innodb引擎生成的文件
-rw-r----- 1 mysql mysql 8586 Aug 15 09:27 test_innodb.frm
-rw-r----- 1 mysql mysql 54525952 Aug 15 09:27 test_innodb.ibd
--myisam引擎生成的文件
-rw-r----- 1 mysql mysql 8586 Aug 15 09:29 test_myisam.frm
-rw-r----- 1 mysql mysql 31457280 Aug 15 09:29 test_myisam.MYD
-rw-r----- 1 mysql mysql 16167936 Aug 15 09:29 test_myisam.MYI
对应的test_archive.ARZ是数据文件,test_archive.frm是表格文件。
支持select、insert等操作;
不支持delete 、update、索引等操作;
使用zlib无损数据压缩算法,节省空间;
适用于大量历史数据(可查询但不能删除)的保存;