美文网首页
高性能MySQL03-存储引擎

高性能MySQL03-存储引擎

作者: 四月不见 | 来源:发表于2019-03-12 00:35 被阅读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 著

相关文章

  • 高性能MySQL03-存储引擎

    一、简介 关于InnoDB与MyISAM存储引擎已经在前面的章节有所介绍,这里就不再重复了,谈谈MySQL的其它存...

  • MySQL ARCHIVE存储引擎的测试

    最近在看《高性能MySQL》(第三版)中提到的Archive存储引擎,书中提到 Archive存储引擎会缓存所有的...

  • InnoDB存储引擎

    InnoDB是一个高性能,高可用,高扩展性的存储引擎。 InnoDB体系架构 InnoDB存储引擎有多个内存块,这...

  • MySQL存储引擎InnoDB和MyISAM区别及使用场景

    InnoDB存储引擎 InnoDB是一个事务型的存储引擎,设计目标是处理大数量数据时提供高性能的服务,它在运行时会...

  • InnoDB 索引漫谈

    InnoDB存储引擎支持事务,是一个通用的、平衡了高可用与高性能的存储引擎。它的设计目标主要面向在线事务处理(OL...

  • 一步到位之INNODB

    快速认识InnoDB InnoDB是MySQL下使用最广泛的引擎,它是基于MySQL的高可扩展性和高性能存储引擎,...

  • 一步到位之INNODB

    快速认识InnoDB InnoDB是MySQL下使用最广泛的引擎,它是基于MySQL的高可扩展性和高性能存储引擎,...

  • Tair——概述

    Tair是提供快速访问的内存(MDB引擎)/持久化(LDB引擎)存储服务,基于高性能、高可用的分布式集群架构,满足...

  • 使用Codis搭建redis集群服务

    一. 应用场景 redis 作为数据结构存储引擎,有着很多优点 高性能单机引擎可以达到5-10W qps 数据结构...

  • MYSQL的INNODB 与MYISAM区别

    innodb 简介 innodb 是平衡于可靠性与高性能的通用数据存储引擎,是MYSQL5.6以上版本默认的存储引...

网友评论

      本文标题:高性能MySQL03-存储引擎

      本文链接:https://www.haomeiwen.com/subject/dqcipqtx.html