您的位置:首页 > 数据库 > MySQL

Mysql存储引擎小析

2015-01-26 15:44 671 查看
一、简介

数据库中有的表存储的数据主要应对查询,比如一些字典表,费率表,有些表主要应对修改,比如评论表的和反馈表,有的表读和写的频率都很高,比如商品表。根据不同的情况可使用不同的存储引擎。高并发的读写访问,必须要有事务的支持,而仅有高频读的表则不需要事务的支持。

Mysql数据库的存储引擎是解决以上问题的有用特性,可以让工程师在表级别根据不同的场景使用不同的存储模式。最常用的包括如下三种模式:

1)MyISAM(ISAM:Indexed Sequence Access Method):用来支持读频率远超过写频率的表,提供表级锁,不支持事务。每张表使用不同的数据文件。

2)InnoDB:用来支持高频读写的表。本模式支持事务,行级所和外键。InnoDB有两种模式:共享表空间和多表空间(不同的表用不同的表空间)

3)MEMORY:用来支持很少被修改的表,比如字典表。MEMORY实际就是内存表,每个MEMORY表对应磁盘上的一个表,如果修改了MEMROY表中的数据,不会更新到磁盘中

4)MRG_MYISAM:用来支持把多个相同结构的MYISAM表逻辑的组织起来,作为一个整体对外提供数据,实际提供了多个表的一个门面。

模式 读效率 写效率 外键 事务 锁级别

MYISAM 高 低 不支持 不支持 表

InnoDB 较高 较高 支持 支持 行

MEMORY 很高 高 不支持 不支持 表

MRG_MYISAM 高 低 不支持 不支持 表

二、查看Mysql支持的存储引擎模式

登录后,运行show engines命令,可以看到Mysql当前支持的所有引擎,比如:

mysql> show engines;

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| Engine | Support | Comment | Transactions | XA | Savepoints |

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |

| CSV | YES | CSV storage engine | NO | NO | NO |

| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |

| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |

| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |

| MyISAM | YES | MyISAM storage engine | NO | NO | NO |

| ARCHIVE | YES | Archive storage engine | NO | NO | NO |

| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |

| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

9 rows in set (0.00 sec)

三、选择使用存储引擎模式

可以根据你的应用系统中不同的表的情况选择使用不同的存储引擎。

数据库安装后有一个缺省的存储引擎模式,从上表中看出系统缺省的存储引擎模式为InnoDB。

可以在创建表时显示的指定所使用的存储引擎模式:

比如,如下的键表语句选择使用MEMORY存储引擎模式:

CREATE TABLE `dict_head_info` (

`DICTHEADID` int(11) NOT NULL,

`DICTHEADNAME` varchar(64) NOT NULL,

PRIMARY KEY (`DICTHEADID`) ) ENGINE=MEMORY DEFAULT CHARSET=gbk;

如果不显示的指定存储引擎模式,则使用缺省的存储引擎模式(前表中的InnoDB)。

四、总结

当工程师们为了提高数据库的访问性能而优化核心参数,优化SQL,甚至使用集群功能时,往往没有认真的利用Mysql所提供的存储引擎,甚至使用存储引擎时也仅仅时从别人的建表语句中拷过来,而没有认真的思考使用场景,从而确定与使用场景对应的存储引擎模式。我认为,在合理的数据库设计的基础上,要优先考虑针对不同的表选择不同的存储引擎模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: