innodb与myisam的区别
1myisam 2.innodb区别
1.不支持事务 2.支持
show variables like '%autocommit%';,默认都是自动提交的
我之前一直有疑问,我怎么从来没用过事务,现在知道,是系统自动的
insert into test values(1)
比如这个,在开始执行的时候,开启事务,在执行完成后,关闭事务
1.非聚集索引存储 2.聚聚索引存储
innoodb的idb文件既存储索引,又存储实际记录。myisam B+树叶子节点存储记录的指针
1.表锁,2.行锁,表锁
innodb如果操作命中索引,是行锁,否则上升到表锁
innodb必须有主键,没有的话系统生成,因为他就是按照主键存储记录的。myisam可以没有
存储文件不一样
innodb:frm,idb
myisam:frm,myi,myd
如何选择:
1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;
2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,请使用InnoDB。
3. 系统奔溃后,MyISAM恢复起来更困难,能否接受;
4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。
InnoDB为什么推荐使用自增ID作为主键?
答:自增ID可以保证每次插入时B+索引是从右边扩展的,可以避免B+树和频繁合并和分裂(对比使用UUID)。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。
innodb引擎的4大特性
插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead)
select VERSION();
show ENGINES;
select @@tx_isolation; //查看事务级别
select @@global.tx_isolation;//系统事务级别
show variables like '%autocommit%';