› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
stillFox
V2EX  ›  MySQL

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

  •  
  •   stillFox · Jun 5, 2020 · 3548 views
    This topic created in 2304 days ago, the information mentioned may be changed or developed.

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

    7 replies  •  2020-06-11 17:33:47 +08:00
    kefirzhang
        1
    kefirzhang  
       Jun 5, 2020
    单列索引不存储 null 值,复合索引不存储全为 null 的值
    kefirzhang
        2
    kefirzhang  
       Jun 5, 2020   ❤️ 1
    就是说如果是 null 索引树里面没有这个点,查询的时候 =null 并不会查出来数据
    SELECT * FROM `tbUniq` WHERE `name`=NULL
    空
    要用 is null
    SELECT * FROM `tbUniq` WHERE `name` is NULL

    is null 不用索引检索
    ab11800222
        3
    ab11800222  
       Jun 5, 2020
    null 是未知、未确定的意思,本身不代表任何一个值,既然不算一个值,也就不存在两个 null 值相等的说法,所以不算破坏唯一性约束
    yumenawei
        4
    yumenawei  
       Jun 5, 2020
    @kefirzhang #2 请教下,如果索引树没存的话,是存在哪里呢?有一个单独的结构吗?
    wy315700
        5
    wy315700  
       Jun 5, 2020
    MySQL 里 null 不等于 null
    kefirzhang
        6
    kefirzhang  
       Jun 11, 2020
    @yumenawei 个人理解 就是不存,他不在索引树里面不能作为索引 key,只能当成数据存储
    yumenawei
        7
    yumenawei  
       Jun 11, 2020
    @kefirzhang #6 那如果我查找为 null 的值,不能走索引,只能扫全表?感觉不是很合理呀
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   902 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:34 · PVG 06:34 · LAX 15:34 · JFK 18:34
    ♥ Do have faith in what you're doing.