Mysql内部原理图
借用别人一张图看看

数据库表的数据存储在数据库里及磁盘上和上述视频格式及存储磁盘文件系统格式特征类似,也有很多种存
储方式。但是对于用户和应用程序来说同样一张表的数据,无论用什么引擎来存储,用户看到的数据都是一
样的,不同的引擎存储,引擎功能,占用的空间大小,读取性能等可能有区别。Mysql最常用存储引擎为:
myisam和InnoDB,全文索引:myisam和innodb都支持。
Mysql的存储引擎是mysql数据库的重要组成部分,mysql常用的表的引擎为myisam和innodb两种,mysql
的每种存储引擎在mysql里是通过插件的方式使用的,mysql可以同时支持多种存储引擎。
下面是mysql存储引擎体系结构简图。
MyIsam存储引擎
什么是myisam引擎?
Myisam引擎是mysql关系数据库管理系统的默认存储引擎,这种mysql表存储结构从旧的ISAM代码拓展出
许多有用的共嗯,在新版本的mysql种,Innodn引擎由于其对事务参照完整性,以及更高的并发性等有点开
始逐步的取代Myisam引擎
Mysql5.1数据库的默认存储引擎为myisam
每一个myisam的表都对应于硬盘上的三个文件,这三个文件有一样的文件名,但是有不同的拓展名指示其类型用途:
.frm文件保存表的定义,这个文件并不是MyIsam引擎的一部分,而是服务器的一部份:
.myd保存表的数据
.myi是表的索引文件
.myd和.myi是myisam的关键点
Myisam引擎特点:
1、不支持事务
2、表级锁定,数据更新时锁定整个表,其锁定机制是表级锁定,这虽然可以让锁定的实现成本很小,但是也同时大大降低了其并发性能。
3、读写互相阻塞:不仅会在写入的时候阻塞读取,myisam还会在读取的时候阻塞写入,但本身并不会阻塞另外的读。
4、只会缓存索引:myisam可以通过key_buffer_size缓存索引,以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据
grep key_buffer my.cnf
Key_buffer_size = 16M
5、读取速度快,占用资源相对少
6、不支持外键约束,但支持全文索引
7、Myisam引擎是mysql5.5.5前缺省的存储引擎。
Myisam引擎适用的生产业务场景
1、不需要事务支持的业务
2、一般为读数据比较多的应用,读写都频繁场景不适合,读多或者写多的都适合
3、读写并发访问相对较低的业务
4、数据修改相对较少的业务(阻塞问题)
5、对数据一致性要求不是非常高得业务(不支持事务)
6、硬件资源比较差得机器可以用myisam
7、读写分离得mysql从库可以使用myisam
小结:单一对数据库得操作都可以使用Myisam,所谓单一就是尽量纯读,或纯写
Myisam引擎调优精要:
1、设置合适得索引(缓存机制)
2、调整读写优先级,根据实际需求确保重要操作更优先执行
3、启用延迟插入改善大批量写入性能(降低写入频率,尽可能多条数据一次性写入)
4、尽量顺序操作让inset数据都写入尾部,减少阻塞
5、分解大得时间长得sql操作,降低单个操作得阻塞时间
6、降低并发数(较少对mysql访问),某些高并发场景通过应用进行排队队列机制
7、对于静态(更改不频繁)得数据库数据,充分利用Query Cache或memcached缓存服务可以极大得提高访问效率,网站动态内容静态化,较少对数据库得访问。
Query_cache_size = 256M Query_cache_min_res_unit = 2k
Query_cache_limit = 1M
8、Myisam得count只有在全表扫描的时候特别高效,带有其他条件的count都需要进行实际的数据访问。
Select count(*) from tables;
为什么mysql5.5.5以前默认是myisam引擎,而mysql5.5.5以后默认是innodb
为什么mysql库里内部表默认是mysqlisam引擎。
InnoDB
什么是InnoDB引擎?
InnoDB引擎是MySQL数据库的另一个重要的存储引擎,正成为目前Mysql AB所发行新版的标准,被包含在所有二进制安装包里,和其他的存储引擎相比,InnoDB引擎的有点事支持ACID的事务,以及参数完整性。
为什么test1.frm没有myisam对应的数据文件和索引文件,这是为什么
nnoDB引擎特点:
1、支持事务:支持4个事务隔离级别,支持多版本读
2、行级锁定:通过索引实现,全表扫描任然会是表锁,注意间隙锁的影响
3、读写阻塞与事务隔离级别相关
4、具有非常高效的缓存特性:能缓存索引,也能缓存数据
5、整个表和主键以cluster方式存储,组成一颗平衡树
6、所有secondary index都会保存主键信息
7、支持分区,表空间,类似oracle数据库
8、支持外键约束,
9、和Myisam引擎比,Innodb对硬件资源要求比较高
InnoDB引擎适用的生产业务场景
1、需要事务支持的业务
2、行级锁定对高并发有很好的适应能力,但是要确保查询是通过索引完成的
3、数据读写及更新都较为频繁的场景
4、数据一致性要求较高的业务
5、硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能较少磁盘IO
6、相比Myisam引擎,innodb引擎更消耗资源,速度没有Myisam引擎快
Innodb引擎调优精要
1、主键尽可能小,比秒给Secondary index带来过大的空间负担
2、简历有效索引比秒全表扫描,因为会使用表锁
3、尽可能缓存所有的索引和数据,提高响应速度,减少磁盘IO消耗
4、在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交,
5、合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性
6、避免主键更新,因为这会带来大量的数据移动
本文详细介绍了Mysql的两大主要存储引擎MyISAM和InnoDB。MyISAM是MySQL的默认存储引擎,适用于读取多、写入少的场景,但不支持事务。InnoDB则提供事务支持,行级锁定,适用于高并发和数据一致性要求高的业务。文章还探讨了两者的调优策略和适用场景,并分析了为何在MySQL5.5.5之后,默认引擎由MyISAM变为InnoDB。
2327

被折叠的 条评论
为什么被折叠?



