不管是Unique
索引还是普通索引,它们的叶子结点中存储的数据都不完整,其中只是存储了作为索引并且排序好的列数据以及对应的主键值。
因此我们通过索引查找数据数据实际上是在索引的B+树中先找到对应的主键,然后根据主键再去主键索引的B+树的叶子结点中找到完整数据,最后返回。所以虽然是两个索引树,但实际上是同一行数据,必须全部锁住。
select * from student where name = 'lisi';
假如我们通过WHERE name = 'lisi'
对数据进行查询,会先用到name
列的唯一索引,最终定位到主键值为1
,然后再到主键索引中查询id = 1
的数据,最终拿到完整的行数据。