Mysql存储引擎小析
来源:互联网 发布:骨朵网络影视数据查询 编辑:程序博客网 时间:2024/04/30 06:07
一、简介
数据库中有的表存储的数据主要应对查询,比如一些字典表,费率表,有些表主要应对修改,比如评论表的和反馈表,有的表读和写的频率都很高,比如商品表。根据不同的情况可使用不同的存储引擎。高并发的读写访问,必须要有事务的支持,而仅有高频读的表则不需要事务的支持。
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所提供的存储引擎,甚至使用存储引擎时也仅仅时从别人的建表语句中拷过来,而没有认真的思考使用场景,从而确定与使用场景对应的存储引擎模式。我认为,在合理的数据库设计的基础上,要优先考虑针对不同的表选择不同的存储引擎模式。
- Mysql存储引擎小析
- MySQL存储引擎小知识
- mysql存储引擎简析
- 【MySQL】MySQL存储引擎
- 【MySQL】MySQL存储引擎
- mysql federated存储引擎引擎
- MySQL的存储引擎
- 1.5. MySQL存储引擎
- mysql存储引擎
- MySQL 存储引擎
- MySQL存储引擎
- Mysql的存储引擎
- MySQL存储引擎
- MySQL存储引擎-应用
- mysql存储引擎
- MySQL存储引擎认知
- MySQL存储引擎选择
- mysql archive存储引擎
- IntelSDK
- The RxJava Android Module
- android中canvas.drawText参数的介绍以及绘制一个文本居中的案例
- C++纯虚函数 virtual =0
- spring mvc 可以配置统一的错误跳转页面
- Mysql存储引擎小析
- 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
- VS2010下创建静态链接库和动态链接库
- Python中的流程控制
- 驱动 之 makefile 详解
- MongoDB用户管理
- Android性能优化典范
- Jxl使用总结
- 基于CMOS模拟开关实现平衡混频器