【数据库Mysql】——存储引擎

来源:互联网 发布:仁和知柏地黄丸的功效 编辑:程序博客网 时间:2024/06/16 19:11

    现在小编的工作中会经常用到MySQL,所以最近在学习一些MySQL的使用,其中提到了存储引擎的概念。本文也是主要讲解存储引擎的概念,内容,分类以及该如何选择合适的存储引擎。

    存储引擎的概念是MySQL的特点,而且是一种插入式的存储引擎概念,存储引擎就是指表的类型,数据库的存储引擎决定了表在计算机中存储方式,用户可以根据自己的不同要求,选择不同的存储方式、是否进行事务处理。

查看MySQL存储引擎

查看MySQL数据库支持的存储引擎类型。方法如下

<span style="font-family:KaiTi_GB2312;font-size:24px;">show engines;</span>

    

    在查询结果中,Engine参数指存储引擎名称;Support参数说明MySQL是否支持该类引擎;Comment参数指对该引擎的评论;Transactions参数是否支持事物处理;XA是否分布式交易处理的XA规范;Savepoints参数是否支持保存点,以便事务回滚到保存点。

    还有一种查询MySQL支持的存储引擎

show variables like 'have%';

    

    查询结果中:Variable_name表示存储引擎的名称,value表示MySQL支持情况。YES表示支持,No表示不支持,DISABLED表示支持但是还有没有开启。

查看MySQL版本默认存储引擎

<span style="font-family:KaiTi_GB2312;font-size:24px;">show variables like 'storage_engines';</span>

    

如何修改默认存储引擎

   修改默认的存储引擎,可以在my.ini中进行修改,将default-storage-engine=InnoDB修改为需要的存储引擎,例如修改为MyISAM,default-storage-engine=MyISAM,然后重启服务,修改生效,注意在Windows平台下面没有直接重启MySQL的命令语句,只能采用先停止net stop mysql,在启动的命令net startmysql。

讲解InnoDB,MyISAM,MEMORY三种存储引擎

1、InnoDB存储引擎

    InnoDB给MySQL的表提供了事务,回滚,崩溃修复能力和多版本并发控制的事务安全。InnoDB存储引擎支持自动增长列(AUTO_INCREMENT),且在MySQL中规定自动增长列必须为主键;支持外键(FOREING KEY),外键所在表为子表,外键所依赖的表为父表;创建表的表结构存储在.frm文件中。数据和索引存储在innodb_data_home_dir和innodb_data_file_path定义的表空间中。

    InnoDB的优势在于提供良好的事务管理,崩溃修复能力和并发控制,缺点在器读写效率稍差,占用数据空间相对比较大。

2、MyISAM存储索引

    MyISAM存储索引的表存储成3个文件,文件的名字和表名相同,扩展名包括frm、MYD、MYI。其中,frm为扩展名的文件存储表结构,MYD为存储数据,MYI扩展名的文件存储索引。其支持三种不同的存储格式,静态型,动态型,和压缩型。

    MyISAM优势在于占用空间小,处理速度快,缺点是不支持事务的完整性和并发性。

3、MEMORY存储引擎

    MEMORY存储引擎是MYSQL中一类特殊的存储引擎,存储在内存中的内容来创建表,而且这些数据都放到内存中。所以其对数据的快速处理,提高整个表的处理效率,但是服务器需要有足够的内存来维持MEMORY,其存储引擎默认为哈希索引,速度非常的快。但是MEMORY表的大小受到限制。一个是max_rows和max_heap_table_size。

    MEMORY存储引擎,这类表的处理速度非常快,但是数据易丢失,生命周期短。

三种引擎对比

   根据上表三种引擎对比,个人认为在选择引擎的时候根据数据的操作来选择。

InnoDB:对事务的完整性要求比较高,要求实现并发控制,或者需要进行频繁的更新,删除操作的表,因为该类引擎实现事务的提交和回滚。

MyISAM存储引擎:主要用于插入新记录和读出记录,可以提高效率,而且空间和内容使用比较低。

MEMORY:需要很快的读写速度,对数据的安全性要求性低,但是对表的大小有要求,不能建立太大的表。

总结

    上面仅仅是对三种引擎进行了分析和对比,而且这些对比并不是绝对的,在实际应用中还需要根据实际情况进行分析。关于存储引擎还有很多种,但是小编也是出于初学者的阶段,涉猎不是很多,以后待小编学习之后定会进行分享。

题外话

     在这小编也同样推荐一篇博客:MySQL数据库性能优化之存储引擎选择(MyISAM、InnoDB、NDBCluster)因为小编对其中的NDBCluster并不很熟悉所以就不进行单独讲解了。待小编研究后再来分享。

如有理解偏颇之处,请各位大神不惜赐教,不胜感激!

 

 

0 0