前情回顾
上一集讲到各种数据结构,以及解析了mysql为什么选用b+树作为索引的数据结构。这一集来讲一下mysql中索引在存储引擎中是如何实现的。这一篇过去以后,就能对整个索引有一个深刻的理解。 mysql有两个存储引擎:InnoDB和MyISAM。下面就来看一下这两个存储引擎里,索引都是如何实现的。
MyISAM
MyISAM存储引擎是一个不支持事务的表级锁的存储引擎。它存储结构的特性是,索引以及数据是分开的。下面讲一个例子来说明一下:
我们在mysql中建立一个库demo_database下建立一个表t_test_myisam,将存储引擎设置成MyISAM



InnoDB
InnoDB是一个支持事务而且支持行级锁的存储引擎。它的存储特性是将索引和数据储存在一起的。 我们继续在mysql中建立一个库demo_database下建立一个新的表,命名为t_test_innodb,将存储引擎设置成InnoDB



InnoDB引发思考
InnoDB是鼓励数据表是一定要建立一个主键的,而且最好是整型的自增主键。为什么要这样限制呢?我们可以从InnoDB的存储结构思考。 1.一定要建立主键。 根据上面的了解,我们现在知道InnoDB将索引和数据存储在一起的。那么可以想一下,假如没有主键,那么是不是数据表就没有了主键索引,那么我们数据会保存在哪里?这样一想是不是就能知道一定要建立主键的原因了。 2.主键要用整型自增主键 这个其实是和查询有关系的,做个比喻,有好一些业务系统中,主键都是用uuid的,这种做法的坏处是,假如我们不管是查询,还是插入修改等操作,在根据主键搜索的时候,在各个索引值比对的时候会存在一个问题,就是字符串比对得转换成ASCII码进行比对,这样效率很明显是降低的。这也就是我们提倡使用整型自增主键的原因,不管是插入,还是查询,效率都会比较高。
If you enjoyed this, leave a comment~