标签:功能 isa 多线程模型 多线程 表锁 合并 因此 dml aci
一、存储引擎
Mysql中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中每一种技术都使用了不同的存储机制,索引技巧、锁定水平并且最终提供广泛的不同功能和能力。通过选择不同的技术,你能够获得额外的速度或功能,从而改善你的应用的整体功能。
二、分类
1.MYISAM存储引擎:
不支持事务,也不支持外键,优势是访问速度快,对事务完整性没有要求或者以SELECT,INSERT为主的应用基本可以用这个引擎创建表。
(1)数据存储形式
MyISAM采用的是索引与数据分离的形式,将数据保存在三个文件中.frm.MYD,.MYIs。
.frm存储表结构
.MYD存储表的数据
.MYI存储表索引
(2)锁的粒度
MYISAM只支持表锁不支持行锁,所以读取时对表加上共享锁,在写入是对表加上排他锁。由于是对整张表加锁,相比INNODB,在并发写入时效率很低。
(3)数据的存储的特点
MYISAM是基于非聚簇索引进行存储的。
(4)表的存储格式
表的存储格式分成三种表 静态表,动态表,压缩表。
静态表:表中的字段都是非变长字段。这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照死的宽大度定义补足空格)ps:在取数据的时候,默认会把字段后面的空格去掉,如果不注意会把数据本身带的空格也会忽略。
动态表:
记录不是固定长度的,这样存储的优点是占用的空间相对较少;缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk-r命令来改善性能。
压缩表:因为每个记录是被单独压缩的,所以只有非常小的访问开支
(5)其他
MyISAM提供了大量的特性,包括全文索引,压缩,空间函数,延迟更新索引键等。
进行压缩后的表是不能进行修改的,但是压缩表可以极大减少磁盘占用空间,因此也可以减少磁盘IO,从而提供查询性能。
全文索引,是一种基于分词创建的索引,可以支持复杂的查询。
延迟更新索引键,不会将更新的索引数据立即写入到磁盘,而是会写到内存中的缓冲区中,只有在清除缓冲区时候才会将对应的索引写入磁盘,这种方式大大提升了写入性能。
2.INNODB存储引擎
INNODB存储是MYSQL默认事务引擎,也是目前重要、使用最广泛的存储引擎。
概述:
支持事务,行锁设计,支持MVCC(多版本并发控制)来支持高并发,支持外键,提供一致性非锁定读设计。
优点:
DML操作遵循ACID模型(原子性、一致性、隔离性和持久性),支持事务,支持CRASH-RECOVERY特性(当MYSQL发生故障重启后,对于INNODB表,没有完成的事务将通过REDO日志重新进行,已经提交但是没有写到数据文件中的数据,将从doublewrite buffer中重新构建)以保护数据。
2、InnoDB buffer pool 缓存被访问的表和索引信息,经常使用的数据直接从内存中读取。
3、inserts,update,deletes操作被一种称为change buffering的机制所优化。InnoDB不仅允许多并发读写同一张表,它还会缓存发生改变的数据,优化磁盘I/O。
4、当数据库运行大表的长时间查询且反复访问相同表的相同行时,一种叫做Adaptive Hash Index的特性使这些查询更快,就像数据从哈希表中查询出来一样。
5、可以压缩表和相关的索引。
6、可以对性能和可用性造成很小影响地创建和删除索引。
7、可以很快TRUNCATE掉一个file_per_table表空间,释放出磁盘空间供操作系统使用,而不必释放出仅能供InnoDB所重用的系统表空间。
8、支持行级锁和一致性读,提高多用户的并发性和性能。
9、支持主键,提高查询性能。
10、为了保持数据的完整性,InnoDB也支持外键。
11、你可以将InnoDB表与MySQL其他存储引擎的表自由组合在一起使用。例如,在一个SQL中,你可以关联一张InnoDB表和一个内存表。
12、在处理大量数据的时候,InnoDB引擎可以有效的发挥CPU效率和提升性能。.
INNODB体系结构
标签:功能 isa 多线程模型 多线程 表锁 合并 因此 dml aci
原文地址:https://www.cnblogs.com/flamechan1981/p/11727479.html