You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含唯一值列的索引选型疑问:唯一与非唯一索引搜索逻辑探讨

关于唯一/非唯一索引在等值查询中的行为拆解

嘿,咱们先把你的误解和问题拆解开来说清楚:

首先纠正两个关键误区:

  • 唯一索引不是从表开头搜索到目标值就停止——它是基于B-tree(大部分数据库默认的索引结构)的快速定位,通过二分查找直接找到目标键的位置,根本不会从头扫表;
  • 非唯一索引在等值查询(比如你的where name = 'Jeane Lamm')场景下,也不会去“搜索WHERE语句的临近范围”,那是范围查询(比如name LIKE 'J%')才会有的逻辑。

针对你的具体场景:
你的列全是唯一值,哪怕建的是非唯一索引,执行where name = 'Jeane Lamm'时,数据库的操作逻辑是这样的:

  1. 利用索引的有序性(字符串索引会按字典序排序),通过B-tree的分层查找,直接定位到Jeane Lamm这个字符串对应的索引节点;
  2. 因为你的列没有重复值,所以找到这个索引条目后,就能直接关联到对应的行数据返回,既不会扫描所有J开头的名称,更不会触发全表扫描。

额外补充:
唯一索引和非唯一索引的核心差异只在于是否允许键值重复,在等值查询的执行效率上,当列没有重复值时,两者几乎没有区别——唯一索引只是多了一层“确保键值唯一”的约束,查找逻辑和非唯一索引是一致的。只有当你执行范围查询(比如找所有J开头的名字)时,才会扫描索引中对应的范围区间,但那也远快于全表扫描。

内容的提问来源于stack exchange,提问作者areviews app

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:37:41