唯一索引和普通索引的选择

首先,我们看看这两个的查询性能差别。

唯一索引上的字段的数据只能是唯一的,而普通索引可以有重复数据。

题外话:非主键索引是会通过回表来多一次查询过程(唯一索引也是非主键索引)。

例如 SELECT * FROM user WHERE k=5 这条语句

  • 对于普通索引来说,k是普通索引的话,会在普通索引上面找出满足条件的值,找到之后会继续往下找。
  • 对于唯一索引来说,会在索引上面找出满足条件的值后就停止不继续往下,因为这行数据是唯一的。

从字面上看的话,这两者之间差距很大,因为唯一索引每次都是第一次就确定要的数据,但其实在内部的设计中,这两者之间差距并不是很大。

为什么呢?因为MySQL是有个缓冲池的,它是通过预读(Read-Ahead)将磁盘里面的数据一页页的存入内存中,每页数据大概有16KB。

也就是说,当需要读一条记录的时候,并不是将这个记录本身从磁盘读出来,而是以页为单位,将其整体读入内存。而因为是按页读写的,所以k=5这行数据就在内存中了, 对于普通索引多做的“继续往下寻找”就并不会很慢。

本作品采用《CC 协议》,转载必须注明作者和本文链接
纯阳太极两仪四象八卦圈
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!