MySQL存储引擎

来源:互联网 发布:淘宝商品佣金查询 编辑:程序博客网 时间:2024/06/16 09:23

  写这篇文章之前,看了好多关于存储引擎的文章,算是集大家的看法和我自己的一点想法,我们共勉!

关于存储引擎的命令:

1.查看当前默认引擎:
  show variables like ‘default_storage_engine’;
2.列出当前数据库所支持到引擎:
  show engines;
3.查询哪些存储引擎支持事物处理:
  select engine from information_chema.engines where transactions = ‘yes’;
4.查看所有表的引擎:
  show table status from DBname;
5.查看所有表的引擎信息:
  show table status like ‘t_i%’\G;
6.设置当前会话的默认存储引擎:
  SET storage_engine=InnoDB;
7.修改表的存储引擎
  ALTER TABLE t_name ENGINE = innodb;
  

1.存储引擎是什么?

官方定义:   
  数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。

我的理解:
  一辆汽车的引擎是它的发动机,你可以把兰博基尼的发动机改装在你的车上,也可以把国产的吉利汽车的发动机改装在你的车上。无论你用那一台发动机,这辆车都是可以跑起来的。区别就是:兰博基尼的发动机动力更强,但是更费油,发动机更贵;吉利的动力弱,质量差一点,但是省油,价格便宜。所以要根据你的实际需求去选择需要的那一台。MySQL存储引擎道理一样!

2.存储引擎包括哪些?

MySQL服务器的版本(我用的5.7.17)不同,存储引擎会有或大或小的变化。

查看你的MySQL中存储引擎列表:
mysql> show engines;

Engine Support Comment Transactions XA Savepoints InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO MyISAM YES MyISAM storage engine NO NO NO CSV YES CSV storage engine NO NO NO ARCHIVE YES Archive storage engine NO NO NO PERFORMANCE_SCHEMA YES Performance Schema NO NO NO FEDERATED NO Federated MySQL storage engine NULL NULL NULL

这是MySQL服务器列出来的,鬼子的东西看不懂,所以翻译成人话。

引擎 支持 评论 处理事务 分布式 保存点 InnoDB 默认 支持事务、行级锁定和外键 是 是 是 MRG_MYISAM 是 相同的MyISAM表集合 否 否 否 MEMORY 是 基于哈希,存储在内存中,用于临时表 否 否 否 BLACKHOLE 是 /开发/空存储引擎(任何你写它消失) 否 否 否 MyISAM 是 MyISAM存储引擎 否 否 否 CSV 是 CSV 存储引擎 否 否 否 ARCHIVE 是 ARCHIVE存储引擎 否 否 否 PERFORMANCE_SCHEMA 是 性能模式 否 否 否 FEDERATED 否 联合MySQL存储引擎 空 空 空

可以看出:
InnoDB是默认的存储引擎。

(1).InnoDB存储引擎

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB是默认的MySQL引擎。

InnoDB主要特性有:

1、InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。

2、InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的。

3、InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。

4、InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键。

5、InnoDB被用在众多需要高性能的大型数据库站点上。

注意:
InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。

2.MyISAM存储引擎

 1.它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。

每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:
.frm(存储表定义)
MYD(MYData,存储数据)
MYI(MYIndex,存储索引)

2.MyISAM的表还支持3种不同的存储格式:

静态(固定长度)表
动态表
压缩表

  其中静态表是默认的存储格式。静态表中的字段都是非变长字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。静态表在数据存储时会根据列定义的宽度定义补足空格,但是在访问的时候并不会得到这些空格,这些空格在返回给应用之前已经去掉。同时需要注意:在某些情况下可能需要返回字段后的空格,而使用这种格式时后面到空格会被自动处理掉。
  动态表包含变长字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁到更新删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk -r命令来改善性能,并且出现故障的时候恢复相对比较困难。
  压缩表由myisamchk工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

3.MEMORY

  memory使用存在内存中的内容来创建表。每个MEMORY表实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问非常快,因为它到数据是放在内存中的,并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。

4.MERGE

  merge存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,MERGE表中并没有数据,对MERGE类型的表可以进行查询、更新、删除的操作,这些操作实际上是对内部的MyISAM表进行操作。

3.如何选择存储引擎

功能 MYISAM Memory InnoDB Archive 存储限制 256TB RAM 64TB None 支持事物 No No YES No 支持全文索引 YES NO NO NO 支持数索引 Yes No No No 支持哈希索引 No Yes No No 支持数据缓存 No N/A Yes No 支持外键 No No Yes No

注意:
一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能。

原创粉丝点击