[关闭]
@llplmlyd 2023-05-11T11:27:34.000000Z 字数 618 阅读 187

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

数据库


唯一索引上的字段的数据只能是唯一的,而普通索引可以有重复数据。
非主键索引是会通过回表来多一次查询过程 (唯一索引也是非主键索引)。

假设 k 是表 t 上的索引,在搜索 select id from t where k=5 时,会先从 k 这棵 B+ 的树根开始,按层搜索叶子节点,找到 k=5 的数据页,然后在数据页内容进行二分法定位。
对于普通索引,找到 k=5 的记录后,会继续向下查找一个,直到碰到第一个不是 5 的记录结束。
对于唯一索引,由于取值唯一,找到后直接停止。

由于 InnoDB 是按照数据页为单位(数据页默认 16 KB)进行读写的,在读取一条数据时,会将整个数据页整体读到内存。 在读入内存的数据页中,如果包含 k=5 的记录,在查询的情况下,唯一索引比普通索引多了一次查找和判断的过程,可以忽略。

如果 k=5 是当前数据页的最后一条,就需要在读取下一个数据页。但这发生的概率较低,也可以忽略。

所以总得来说,普通索引和唯一索引在查询的过程中差异不大。

索引选择性

索引选择性=基数/数据行

  1. show index from table_name 可查看
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注