• 索引字段说明


    看到网上有一些人说: MySql中如果某一列中含有NULL,那么包含该列的索引就无效了。

    给one 和two 字段分别加上普通索引。之前有写过,在复习添加索引:Mysql索引整理总结

    -- ALTER TABLE table_name ADD INDEX index_name(col_name);
    ALTER TABLE tb_test ADD INDEX index_oat (one, two);
    ALTER TABLE tb_test add INDEX index_two(two);
    1
    2
    3
    使用 show keys from 表名;或show indexes from 表名; ,查看这个表的所有索引信息。

    一个普通索引,一个复合索引。

    复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第一个字段,索引才会被使用。因此,在复合索引中索引列的顺序至关重要。

    可以看到,创建了两个索引,并且index_tow NULL 那一列是 YES。

    使用EXPLAIN 来进行演示说明,EXPLAIN 的使用说明:Mysql中explain用法和结果字段的含义介绍

    复合索引

    普通索引

    发现查询two字段 是可以正常使用索引的。我使用的MYSQL 5.7 ,InnoDB 引擎。也看了一些网上的资料,MySQL中NULL对索引的影响 这个文章中用例子验证,MySQL可以在含有null的列上使用索引。

    备注:可能是其他条件下不行,看网上资料说使用空间索引会失效,具体我没有去验证,空间索引没有用到过。查询官网create-index-spatial,感兴趣的伙伴可以自行验证。

    这里我想到一点,很多问题的答案都是在指定的条件和环境下才成立,多质疑,多验证。

    小总结 :在有NULL值得字段上使用常用的索引,如普通索引、复合索引、全文索引等不会使索引失效。在官网查看在空间索引的情况下,说明了 索引列必须为NOT NULL。

  • 相关阅读:
    利用FlashPaper实现类似百度文库功能
    浅谈Oracle函数返回Table集合
    Oracle 触发器在日志管理开发中的应用
    Putty 工具 保存配置的 小技巧
    java.util.Date转java.sql.Date丢失时间问题
    java String和Date转换
    springboot项目使用拦截器修改/添加前端传输到后台header和cookie参数
    Spring的使用及Spring3.2控制器增强@ControllerAdvice
    使用fastjson统一序列化响应格式
    【转】Elastic-Job
  • 原文地址:https://www.cnblogs.com/ly570/p/11311253.html
Copyright © 2020-2023  润新知