Mysql中的MyISAM引擎和Innodb引擎
文章参考:https://mp.weixin.qq.com/s/cOdvz3SPltNQsm-C2Cyd0A
Mysql数据库通过B+树建立索引
-
MyISAM引擎
MyISAM具有很好的查询性能,但不支持事务处理,属于非事务引擎。
MyISAM引擎索引采用非聚集索引,也就是数据和索引存放在不同的文件上。在创建表的时候,以主键作为KEY建立索引B+树(索引文件),树中的叶子节点存放的是与之对应数据的物理地址,通过这个物理地址,我们可以在对应的数据文件中找到对应的数据信息。当为表中其他字段添加索引时,会根据该字段生成对应的索引B+树,通过叶子节点存放的物理地址,可以在数据文件里找到具体对应的数据信息。 -
Innodb引擎
Innodb支持ACID兼容的事务功能,支持行级锁,是Mysql默认的引擎。
Innodb引擎索引采用聚集索引,也就是数据和索引放在同一个文件上。在使用Innodb引擎创建表时,如果表中有字段ID,Innodb会自动将ID字段设置为主键,并以主键作为KEY建立索引B+树,与MyISAM不同的是,Innodb中主键索引树的叶子节点存放的是具体的数据信息。当我们为表中的其他字段添加索引时,Innodb也会根据该字段生成对应的索引B+树,但特别的是,所生成的B+树叶子节点存放的是主键KEY。获取信息时,会通过对应的主键KEY,去主键索引树中查找对应的数据信息。这样做的目的是节省存储空间,除了主键索引树存放具体数据外,其他索引树只存储主键KEY,数据不会冗余,牺牲一点查询效率,节省巨大的存储空间(用时间换空间)。
两者的比较:
从两者采用的索引方式可以看出,MyISAM查询性能更好。MyISAM通过索引树中存放的物理地址直接的定位到对应的数据信息,而Innodb中,如果不是主键索引查询数据时,需要通过叶子节点对应的主键KEY,再去主键索引树中查询对应的数据信息。
关于索引字段
- 一个字段频繁的作为查询条件时,应该创建索引提高查询效率。
- 唯一性较差的字段不适合单独创建索引。
- 对于更新较频繁的字段也不适合创建索引。