@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 是当前数据页的最后一条,就需要在读取下一个数据页。但这发生的概率较低,也可以忽略。
所以总得来说,普通索引和唯一索引在查询的过程中差异不大。
索引选择性=基数/数据行
show index from table_name 可查看