在数据库中存的就是一张张有着千丝万缕关系的表,因此表的设计的好坏,将直接影像这整个数据库。而在设计表的时候,咱们都关注一个问题,使用什么存储引擎。接下来小编将重点为你们介绍对比两种常见的innodb和MyISAM搜索引擎~mysql
友情连接:MySQL笔记文档算法
一、innodbsql
a、Serializable (串行化):可避免脏读、不可重复读、幻读的发生。数据库
b、Repeatable read (可重复读):可避免脏读、不可重复读的发生。(默认的数据库隔离级别)缓存
c、Read committed (读已提交):可避免脏读的发生。安全
d、Read uncommitted (读未提交):最低级别,任何状况都没法保证。服务器
(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。markdown
二、MyISAM并发
三、总结:高并发
用户并发操做的性能。
若是须要执行大量的SELECT查询,那么MyISAM是更好的选择。
二 行级锁和外键约束
mysql支持三种锁定级别,行级、页级、表级。其中:
表级:直接锁定整张表,在你锁按期间,其它进程没法对该表进行写操做。若是你是写锁,则其它进程则读也不容许行级:仅对指定的记录进行加锁,这样其它进程仍是能够对同一个表中的其它记录进行操做
页级:表级锁速度快,但冲突多,行级冲突少,但速度慢。因此取了折衷的页级,一次锁定相邻的一组记录
一、InnoDB
支持行级锁定,可是表的行锁也不是绝对的,若是在执行一个SQL语句时MySQL不能肯定要扫描的范围
即 update table_name set age='24' where name like '%福%';不明确主键,在执行增删改查操做时,会锁全表
二、MyISAM
支持表级锁定,没有提供对数据库事务的支持,也不支持行级锁和外键,所以当INSERT(插入)或UPDATE(更新)数据时即写操做须要锁定整个表
一、InnoDB
基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操做系统文件的大小
二、MyISAM
存储表的数据,另外一个是.MYI文件,存储的是索引。操做系统对大文件的操做是比较
慢的,这样将表分为三个文件,那么.MYD这个文件单独来存放数据天然能够优化数据
库的查询等操做。有索引管理和字段管理。
一、InnoDB(索引组织表)
使用的聚簇索引、索引就是数据,顺序存储,所以能缓存索引,也能缓存数据
二、MyISAM(堆组织表)
使用的是非聚簇索引、索引和文件分开,随机存储,只能缓存索引
一、InnoDB
必须导出SQL来备份,LOAD TABLE FROM MASTER操做对InnoDB是不起做用的,解决方法是首先把InnoDB表改为MyISAM表,导入数据后再改为InnoDB表,可是对于使用的额外的InnoDB特性(例如外键)的表不适用。
二、MyISAM
应对错误编码致使的数据恢复速度快。MyISAM的数据是以文件的形式存储,因此在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操做。
一、InnoDB
二、MyISAM
一、Innodb
结构,这棵树的叶节点data域保存了完整的数据记录,这种索引就是汇集索引。
a、由于InnoDB的数据文件自己要按主键汇集,因此InnoDB要求表必须有主键(MyISAM能够没有)。
b、若是没有显式指定,则MySQL系统会自动选择一个能够惟一标识数据记录的列做为主键。
c、若是不存在惟一标识数据记录的列,则MySQL自动为InnoDB表生成一个隐含字段做为主键,这个字段长度为6个字节,类型为长整形。
InnoDB的辅助索引data域存储相应记录主键的值而不是地址即InnoDB的全部辅助索引都引用主键做为data域
二、MyIASM
MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址,即叶节点的data域存放的是数据记录的地址
首先按照B+Tree搜索算法搜索索引,若是指定的Key存在,则取出其data域的值,而后以data域的值为地址,读取相应数据记录。
主键索引和辅助索引(结构上没有任何区别,只是主索引要求key是惟一的,而辅助索引的key能够重复)
三、注意
MyISAM表中,能够和其余字段一块儿创建联合索引。
InnoDB要扫描一遍整个表来计算有多少行,可是MyISAM只要简单的读出保存好的行
数便可。注意的是,当count()语句包含where条件时,两种表的操做是同样的