关于 MySQL 的一个问题想请教一下各位

2020-06-05 14:56:31 +08:00
 stillFox

关于 MySQL 的唯一索引有个问题想请教一下。唯一索引是允许多个 null 值存在的,这样不是就不符合唯一性的约束了吗?猜想 MySQL 应该是有另外的机制处理多个 null,想请教一下这个机制是什么? 另外,null 值是不是也存储在 b+树里面呢?如果是的话,那查找的时候 null 值怎么用二分法查找呢?

2193 次点击
所在节点    MySQL
7 条回复
kefirzhang
2020-06-05 15:24:02 +08:00
单列索引不存储 null 值,复合索引不存储全为 null 的值
kefirzhang
2020-06-05 15:29:52 +08:00
就是说如果是 null 索引树里面没有这个点,查询的时候 =null 并不会查出来数据
SELECT * FROM `tbUniq` WHERE `name`=NULL

要用 is null
SELECT * FROM `tbUniq` WHERE `name` is NULL

is null 不用索引检索
ab11800222
2020-06-05 15:48:48 +08:00
null 是未知、未确定的意思,本身不代表任何一个值,既然不算一个值,也就不存在两个 null 值相等的说法,所以不算破坏唯一性约束
yumenawei
2020-06-05 15:56:10 +08:00
@kefirzhang #2 请教下,如果索引树没存的话,是存在哪里呢?有一个单独的结构吗?
wy315700
2020-06-05 16:02:24 +08:00
MySQL 里 null 不等于 null
kefirzhang
2020-06-11 17:29:39 +08:00
@yumenawei 个人理解 就是不存,他不在索引树里面不能作为索引 key,只能当成数据存储
yumenawei
2020-06-11 17:33:47 +08:00
@kefirzhang #6 那如果我查找为 null 的值,不能走索引,只能扫全表?感觉不是很合理呀

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/678970

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX