在数据库中存的就是一张张有着千丝万缕关系的表,所以表的设计的好坏,将直接影像这整个数据库。而在设计表的时候,我们都关注一个问题,使用什么存储引擎。接下来小编将重点为大家介绍对比两种常见的innodb和MyISAM搜索引擎~
一 事务
1、innodb
b、Repeatable read (可重复读):可避免脏读、不可重复读的发生。(默认的数据库隔离级别)
c、Read committed (读已提交):可避免脏读的发生。
d、Read uncommitted (读未提交):最低级别,任何情况都无法保证。
2、MyISAM
3、总结:
二 行级锁和外键约束
mysql支持三种锁定级别,行级、页级、表级。其中:
1、InnoDB
支持行级锁定,但是表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围
即 update table_name set age='24' where name like '%福%';不明确主键,在执行增删改查操作时,会锁全表
2、MyISAM
支持表级锁定,没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表
三 存储
1、InnoDB
基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小
2、MyISAM
四 索引
1、InnoDB(索引组织表)
使用的聚簇索引、索引就是数据,顺序存储,因此能缓存索引,也能缓存数据
2、MyISAM(堆组织表)
使用的是非聚簇索引、索引和文件分开,随机存储,只能缓存索引
五 服务器数据备份
1、InnoDB
必须导出SQL来备份,LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
2、MyISAM
应对错误编码导致的数据恢复速度快。MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
六 使用场景
1、InnoDB
2、MyISAM
七 Innodb和MyIASM的引擎原理
1、Innodb
a、因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有)。
b、如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键。
c、如果不存在唯一标识数据记录的列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
InnoDB的辅助索引data域存储相应记录主键的值而不是地址即InnoDB的所有辅助索引都引用主键作为data域
2、MyIASM
MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址,即叶节点的data域存放的是数据记录的地址
首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。
3、注意
本文分享自 MoziInnovations 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!