一、简介
关于InnoDB与MyISAM存储引擎已经在前面的章节有所介绍,这里就不再重复了,谈谈MySQL的其它存储引擎吧。
二、其它的存储引擎
1、CSV引擎
CSV引擎可以将普通的CSV文件作为MySQL的表来处理,但这种表不支持索引。CSV引擎可以在数据库运行时拷入或者拷出文件。可以将Excellent等电子表格软件中的数据存储为CSV文件,然后复制到MySQL数据目录下,就能在MySQL中打开使用。同样,如果将数据写入到一个CSV引擎表,其它的外部程序也能立即从表的数据文件中读取CSV格式的数据。因此CSV引擎可以作为一种数据交换的机制,非常有用。
2、Memory引擎
如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么使用Memory表(以前也叫做HEAP表)是非常有用的。Memory表至少比MyISAM表要快一个数量级,因为所有的数据都保存在内存中,不需要进行磁盘I/O。Memory表的结构在重启以后还会保留,但数据会丢失。
3、NDB集群引擎
2003年,当时的MySQL AB公司从索尼爱立信公司收购了NDB数据库,然后开发了NDB集群存储引擎,以及分布式的、share-nothing的、容灾的、高可用的NDB数据库的组合,被称为MySQL集群(MySQL Cluster)。
MySQL可以支持很多存储引擎,但大部份情况下,我们选择InnoDB都不会错的。对于如何选择存储引擎,可以简单地归纳为一句话:“除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以代替,否则都应该优先选择InnoDB引擎”。例如,如果要用到全文索引,建议优先考虑InnoDB加上Sphinx的组合,而不是使用支持全文索引的MyISAM。
4、XtraDB引擎
Percona的XtraDB存储引擎是基于InnoDB引擎的一个改进版本,已经包含在Percona Server和MariaDB中,它的改进点主要集中在性能、可测量性和操作灵活性方面。XtraDB可以作为InnoDB的一个完全替代产品,甚至可以兼容地读写InnoDB的数据文件,并支持InnoDB的所有查询。
三、转换表的引擎
1、ALTER TABLE
将表从一个引擎修改为另一个引擎最简单的办法是使用ALTER TABLE
语句。
下面的语句将mytable的引擎修改为InnoDB:
mysql>ALTER TABLE mytable ENGINE = InnoDB;
上述语法可以适用任何存储引擎。但有一个问题:需要执行很长时间。MySQL会按行将数据从原表复制到一张新的表中,在复制期间可能会消耗系统所有的I/O能力,同时原表上会加上读锁。
2、导入与导出
为了更好地控制转换的过程,可以使用mysqldump工具将数据导出到文件,然后然后修改文件中的CREATE TABLE
语句的存储引擎选项,注意同时修改表名,因为同一个数据库中不能存在相同的表名,即便它们使用的是不同的存储引擎。同时要注意mysqldump默认会自动在CREATE TABLE
语句前面加上DROP TABLE
语句,不注意这点可能会导致数据丢失。
3、创建与查询(CREATE和SELECT)
第三种转换的技术综合了第一种方法的高效和第二种方法的安全。不需要导出整个表的数据,而是先创建一个新的存储引擎的表,然后利用INSERT...SELECT
语法来导入数据:
mysql>CREATE TABLE innodb_table LIKE myisam_table;
mysql>ALTER TABLE innodb_table ENGINE=InnoDB;
mysql>INSERT INTO innodb_table SELECT * FROM myisam_table;
如果数据量很大的话,可以考虑对插入操作通过事务进行分批处理:
mysql>START TRANSACTION;
mysql>INSERT INTO innodb_table SELECT * FROM myisam_table
->WHERE id BETWEEN x AND y;
mysql>COMMIT;
四、附
1、查询表的引擎信息
使用SHOW TABLE STATUS
命令可以显示表的相关信息,如:
mysql> show table status like 'user'\G
*************************** 1. row ***************************
Name: user
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 3
Avg_row_length: 105
Data_length: 316
Max_data_length: 281474976710655
Index_length: 2048
Data_free: 0
Auto_increment: NULL
Create_time: 2015-11-10 01:41:24
Update_time: 2017-04-05 14:55:36
Check_time: NULL
Collation: utf8_bin
Checksum: NULL
Create_options:
Comment: Users and global privileges
1 row in set (0.00 sec)
其中Engine说明表的存储引擎类型。
2、查看数据库默认存储引擎
SHOW VARIABLES LIKE 'storage_engine';
参考
《高性能MySQL》 [美]Baron Scbwartz, Peter Zaitsev, Vadim Tkacbenko 著
网友评论