mysql索引为null为什么影响效率?

听说 mysql 的索引不存储 null ,那么我的程序是不是只要不用 where xx = null 之类的就行了?
null 查询效率的影响,是只体现在查询值为 null 本身的行上,还是对全部行都有影响?


其实事情是这样的,我有一个 user 表,唯一主键为 id ,但是有 email 和 OAuthId 两个列,我网站的注册用户通过 email 登录,社会化登录(QQ、微信、微博)登录就通过 OAuthId 识别。
显然 email 和 OAuthId 不能放在不同的表,因为我是用 id 作为数据库中用户唯一标识符,放在不同的表那 id 就乱了。
现在问题来了,我的 email 和 OAuthId 都需要设置唯一索引,但是通过 email 注册的用户没有 OAuthId ,通过社会化登录的用户不一定绑定了 email,所以我需要给他们一个默认值。但他们又是唯一索引,所以我只能设置为可以为空。但是听说设置为可以为空会影响索引效率,请问有更好的设置办法吗?

阅读 4.4k
1 个回答

因为时间有限,具体的"是否会有查询效率上的影响"我没有在文档中找到,不过找到一个MySQL对Null值优化的说明

显然对于 MySQL 而言,不建议使用 xx = null 而应该是 xx IS NULL

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题