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所提供的存储引擎,甚至使用存储引擎时也仅仅时从别人的建表语句中拷过来,而没有认真的思考使用场景,从而确定与使用场景对应的存储引擎模式。我认为,在合理的数据库设计的基础上,要优先考虑针对不同的表选择不同的存储引擎模式。

0 0
原创粉丝点击