前言
mysql中的存储引擎比较多,但是常用的也就两个InnoDB和MyISAM
InnoDB
支持事务(提交、回滚),行级锁(对索引的行级锁,如果没有命中索引,将使用表级锁),外键约束,主键自增,并且灾难恢复性比较好,提供了对数据和索引的缓存,但是5.6版本之前不提供全文检索,并且不存储行数,所以在select count(*)操作的时候需要对全表进行扫描。mysql 5.5版本开始,innodb是mysql默认的存储引擎。所以频繁的插入和更新操作可以选择该引擎。
innoDB存储引擎的索引默认使用的是B+树,并且自动在内存中的“自适应哈希索引缓冲区”建立哈希索引
MyISAM
表级锁,不支持事务,但支持全文检索,主机宕机后容易出现表损坏,存储表的行数。
为什么要用索引?
严格来说B+树索引是有序的,所以通过索引查询数据不需要遍历数据,速度比较快,hash索引通过对key的哈希计算,来查找数据,速度也是比较快的。
B+树索引和哈希索引的区别?
1.B+树索引是一个平衡的多叉树结构,是有序的,查询的时候需要从跟节点开始逐级查询;哈希索引是通过对key的哈希运算来查询数据
2.等值查询的时候,哈希索引有很大的优势,但是在重复值比较多的情况下,效率会比较低,而且不支持范围查询,不支持联合索引的左前缀匹配规则。