MySQL存储引擎

MySQL存储引擎
MySQL引擎概述
MySQL表存储结构是MySQL数据的重要组成部分,有三种主要MySQL表存储结构,MyISAM,InnoDB和NDBCluster。实际上,
MySQL不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间通过插件的方式使用。
1.MyISAM引擎介绍
1.1什么是MyISAM引擎?
MyISAM是MySQL关系型数据库管理系统的默认存储引擎。这种MYSQL表存储结构从旧ISAM代码扩展出许多有用的功能。在新版本的MySQL中,
Innodb引擎由于其对事物参照完整性,以及更高的并发性等优点开始逐步取代MyISAM。
每一个MyISAM表都对应硬盘上三个文件。这三个文件有一样的文件名,但是有不同的扩展名以指示不同的用途:.frm文件保存表的定义,但是
这个文件并不是MyISAM引擎的一部分,而是服务器的一部分;.MYD保存表的数据;.MYI是表的索引文件。
1.2MyISAM引擎特点
1)不支持事务(事件集合,全部事件都执行成功则事物成功)
2)表级锁定(更新时锁整个表):其锁定机制是表级索引,这虽然可以让锁定的实现成本很小但是也同时降低了其并发性能。
3)读写互相阻塞:不仅会在写入的时候阻塞读取,还会在读取时阻塞写入。但是读本身并不会阻塞另外的读。
4)只缓存索引:MyISAM可以通过key_buffer缓存以大大提高访问性能减少磁盘I/O,但是这个缓存区只会缓存索引,而不会缓存数据。
5)读取速度快。占用资源相少。
6)不支持外键约束,但支援全文索引。
7)MyISAM引擎是MySQL缺省的存储引擎。
1.3MyISAM引擎适用的生产业务场景
1)不需要事物支持的业务,一般为读数据较多的网站应用。(不支持事务问题)
2)并发相对较低的业务(锁定机制问题)
3)数据修改相对较少的业务。(阻塞问题)
4)以读为主的业务,例如:www,blog,图片的数据库等业务。
5)对数据一致性要求不是很高的业务。
1)尽量索引(缓存机制)
2)调整读写 优先级,根据实际需要确保重要操作更优先。
3)启用延迟插入改善大批量写入性能。
4)尽量顺序操作让insert数据都写到尾部,减少阻塞。
5)分解大的操作,降低单个操作的阻塞时间。
6)降低并发数。
7)对应相对静态的数据,充分利用Query Cache或memcached可以极大的提高访问效率。
8)MyISAM的Count只要在全表扫描时候特别高效,带有其他条件的count都需要进行实际的数据访问。


2.InnoDB引擎
2.1什么是InnoDB引擎
InnoDB引擎是MySQL的另外一个存储引擎,它的优点是支持兼容ACID的事物(类似于PostgreSQL),以及
参数完整性(即对外键的支持)。Oracle公司于2005年10月收购了Innobase。Innodbase采用双认证授权。
它使用GNU发行,也允许其他想将InnoDB结合到商业软件的团体获得授权。
2.2InnoDB引擎特点
1)支持事物,支持4个事物隔离级别,支持多版本读。
2)行级锁定:通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。
3)读写阻塞与事务隔离级别相关。
4)具有非常高效的缓存特性:能缓存索引,也能缓存数据。
5)整个表和主键以Cluster方式存储,组成一颗平衡树。
6)所有Secondary Index都会保存主键信息。
7)支持分区,表空间等。
8)支持外键约束,不支持全文索引。
2.3InnoDB适用生产业务场景
1)需要事物支持的业务
2)行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成。
3)数据更新较为频繁的场景,如:BBS,SNS等。
4)数据一致性要求较高的业务。
5)硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘IO。
3.4InnoDB引擎调优精要
1)主键尽可能小,避免给Secondary index带来过大的空间负担
2)避免全表扫描,因为会使用表锁
3)尽可能缓存所有的索引和数据,提高相应速度,减少磁盘IO消耗
4)在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交
5)合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性。
6)避免主键更新,因为会带来大量打的数据移动
3.NDBCluster引擎介绍
MySQL集群使用的引擎




总结:mysql常用的MyISAM和innodb的几个简单特性。
MyISAM
1.读取速度快
2.更新锁整个表
3.占用资源少
4.适合读多写少的业务,如www业务。
5.不支持事务。
6.不支持外键约束,但支持全文索引。
7.MyISAM是MySQL缺省的存储引擎。
Innodb
1.读取速度一般。
2.更新一般是锁定当前行。
3.占用资源较多。
4.适合读和写多的业务,如:bbs,微博,SNS等。
5.支持事物,分区,表空间等。
6.支持外键约束,不支持全文索引。

你可能感兴趣的:(Linux学习笔记)