1、存储引擎前端
Mysql中的数据用各类不一样的技术存储在文件(或者内存)中。这些技术中每一种技术都使用了不一样的存储机制,索引技巧、锁定水平而且最终提供普遍的不一样功能和能力。经过选择不一样的技术,你可以得到额外的速度或功能,从而改善你的应用的总体功能。算法
2、分类sql
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中从新构建)以保护数据。
二、InnoDB buffer pool 缓存被访问的表和索引信息,常用的数据直接从内存中读取。
三、inserts,update,deletes操做被一种称为change buffering的机制所优化。InnoDB不只容许多并发读写同一张表,它还会缓存发生改变的数据,优化磁盘I/O。
四、当数据库运行大表的长时间查询且反复访问相同表的相同行时,一种叫作Adaptive Hash Index的特性使这些查询更快,就像数据从哈希表中查询出来同样。
五、能够压缩表和相关的索引。
六、能够对性能和可用性形成很小影响地建立和删除索引。
七、能够很快TRUNCATE掉一个file_per_table表空间,释放出磁盘空间供操做系统使用,而没必要释放出仅能供InnoDB所重用的系统表空间。
八、支持行级锁和一致性读,提升多用户的并发性和性能。
九、支持主键,提升查询性能。
十、为了保持数据的完整性,InnoDB也支持外键。
十一、你能够将InnoDB表与MySQL其余存储引擎的表自由组合在一块儿使用。例如,在一个SQL中,你能够关联一张InnoDB表和一个内存表。
十二、在处理大量数据的时候,InnoDB引擎能够有效的发挥CPU效率和提高性能。.
INNODB体系结构