高性能MySQL03-存储引擎

2019-03-12  本文已影响0人  四月不见

一、简介

关于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 著

上一篇下一篇

猜你喜欢

热点阅读