› 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
JasonLaw
V2EX  ›  MySQL

MySQL InnoDB 的索引将 null 存储在哪里?

  •  1
     
  •   JasonLaw · Jul 31, 2020 · 4801 views
    This topic created in 2255 days ago, the information mentioned may be changed or developed.

    在MySQL 中 IS NULL 、IS NOT NULL 、!=不能用索引?胡扯! - 掘金中,它说:

    对于二级索引来说,索引列的值可能为 NULL 。那对于索引列值为 NULL 的二级索引记录来说,它们被放在 B+树的哪里呢?答案是:放在 B+树的最左边。

    但是我并没有找到相关的官方资料说明这个东西,MySQL InnoDB 真的是如文章所说的那样存储 null 的吗?

    11 replies  •  2022-03-10 10:05:02 +08:00
    yyyyfan
        1
    yyyyfan  
       Jul 31, 2020 via Android
    mysql 数据库是视 null 值小于任何的一个非 null 值
    JasonLaw
        2
    JasonLaw  
    OP
       Jul 31, 2020
    @yyyyfan #1 有没有官方文档说明这个东西呢?我并没有找到相关的内容。
    iConnect
        3
    iConnect  
       Jul 31, 2020 via Android
    MySQL 官方早就解决 Null 索引的问题了,具体哪个版本开始需要去看下文档
    JasonLaw
        4
    JasonLaw  
    OP
       Jul 31, 2020
    @iConnect #3 虽然 https://dev.mysql.com/doc/refman/8.0/en/is-null-optimization.html 说了“MySQL can perform the same optimization on col_name IS NULL that it can use for col_name = constant_value. For example, MySQL can use indexes and ranges to search for NULL with IS NULL.”,但是我更想知道“索引是怎么存储 null”的官方文档,可惜我没有找到。
    iConnect
        5
    iConnect  
       Jul 31, 2020 via Android
    @JasonLaw 只有两种方案,原始的就是继承底层空指针,或者存的值就是 0 。(没有去验证过具体版本的实现)
    zhangysh1995
        6
    zhangysh1995  
       Jul 31, 2020
    应该需要看源代码了,参考 https://dev.mysql.com/doc/internals/en/files-in-innodb-sources.html 里面 \btr (B-TREE) 一节
    zhangysh1995
        7
    zhangysh1995  
       Jul 31, 2020
    我大概看了一下 optimizer 部分 NULL 的存储,是从内存 load 进来的,也就是说底层存储引擎存了 NULL 这个值。https://dev.mysql.com/doc/dev/mysql-server/latest/classField__null.html
    wangyzj
        8
    wangyzj  
       Jul 31, 2020
    这是一个好问题
    空值会索引吗?
    louettagfh
        9
    louettagfh  
       Aug 3, 2020
    NULL 就是一个标志位
    zhangwugui
        10
    zhangwugui  
       Aug 6, 2020
    是个好问题; 我也有相同的疑惑;
    null 在 mysql 行存储中,是有标识位的概念的;
    但 null 在索引中如何存储的,我好像也没找到对应的文档。
    Jericho112
        11
    Jericho112  
       Mar 10, 2022
    索引的最左侧,可以看下这篇文章: https://cloud.tencent.com/developer/article/1658064
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2223 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:41 · PVG 14:41 · LAX 23:41 · JFK 02:41
    ♥ Do have faith in what you're doing.