✏️
blog
  • README
  • 2023 11
    • expect使用
  • 2023 10
    • 通过Appium给iOS应用自动化执行脚本
  • 2023 06
    • 三种ThreadLocal详解
    • 常见限流算法总结
    • 分布式ID生成算法
  • 2023 05
    • 线上机器CLOSE_WAIT连接数异常排查
    • 多数据源引发transactional事务回滚失效
  • 2023 04
    • MySQL中BufferPool
  • 2022 12
    • Linux IO
    • Netty总结
  • 2022 04
    • Thrift
  • 2022 03
    • JVM命令总结
    • 频繁FullGC定位思路
    • Redis总结
    • Spring常见问题总结
    • Kafka总结
  • 2022 02
    • Dubbo柔性服务天池大赛总结
  • 2021 12
    • 泛型中的extends和super
    • 手写一个Spring Boot Starter
  • 2021 11
    • 常用消息队列总结
  • 2021 10
    • swagger2快速使用
    • SpringBoot接口cors跨域访问
  • 2021 08
    • 常用shell命令总结
  • 2021 05
    • 线程cpu飙升排查
    • zookeeper install
  • 2021 04
    • Java虚拟机
    • [Spring Boot](2021-04/2021-04-04-Spring Boot.md)
    • [Spring MVC](2021-04/2021-04-04-Spring MVC.md)
    • 分布式ID
    • 消息队列
    • [Spring AOP](2021-04/2021-04-05-Spring AOP.md)
    • 布隆过滤器
    • Scala内核Spark阻塞排查
  • 2020 12
    • 使用Python优雅实现tail命令
  • 2020 11
    • Spark基础架构
    • 一文搞定Git
    • Spark线上问题引发的思考
  • 2020 04
    • 使用GitBook
  • 2019 05
    • SELinux、Netfilter、iptables、firewall和ufw五者关系
    • 安装npm和nodejs
    • 访问不到云服务器中的项目
  • 2019 04
    • 二叉树中节点与度数
    • 实现会话跟踪的技术有哪些
    • 计算机操作系统-死锁
    • Semaphore Count Down Latch Cyclic Barrier
    • Java内存模型
    • 双重检查锁定
    • synchronized实现底层
    • Lock接口
    • HTTP与HTTPS的区别
    • Java中线程池
    • Java中的阻塞队列
    • 排序算法
  • 2019 03
    • MySQL中索引
    • MySQL存储引擎
    • MySQL锁机制
    • n的阶乘结果后面0的个数
由 GitBook 提供支持
在本页
  • 索引的存储分类
  • 设计索引的原则
  • 索引失效
  • 推荐阅读

这有帮助吗?

  1. 2019 03

MySQL中索引

索引的存储分类

  • B-Tree索引:最常见的索引类型,大部分引擎都支持B树索引,底层数据结构使用B+树

  • Hash索引:Memory、Heap引擎支持,使用场景简单。

  • R-Tree索引(空间索引):空间索引是MyISAM的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少。

  • Full-Text(全文索引):全文索引也是MyISAM的一个特殊索引类型,支持char、varchar、text列,InnoDB从MySQL5.6版本开始提供对全文索引的支持。

设计索引的原则

  • 经常会被使用到的列优先

  • 选择性高的列优先

  • 合理建立索引,索引并不是越多越好

  • 尽量使用短索引

  • 更新十分频繁、数据区分度不高的字段上不宜建立索引

  • 建立索引的列,不允许为null

  • 单表索引建议控制在5个以内

  • 单索引字段数不允许超过5个

索引失效

Hash索引:

  • 只用于使用=或<=>操作符的等式比较,只适用于key-value查询

  • Hash索引不适用于范围查询,例如<、>、<=、>=这类操作

B-Tree索引:

  • 以%开头的LIKE查询不能利用B-Tree索引

  • 数据类型出现隐式转换的时候也不会使用索引,特别是当列类型是字符串,要将字符串用引号引起来索引才生效

  • 复合索引的情况下,假如查询条件不包含索引列最左边部分,即不满足最左原则,是不会使用复合索引的,右边可以没有,左边和中间不能缺

  • 如果MySQL估计使用索引比全表扫描更慢,则不使用索引

  • 用or分割开的条件,每一列都要有索引才能使用索引

推荐阅读

上一页2019 03下一页MySQL存储引擎

最后更新于4年前

这有帮助吗?

https://github.com/Snailclimb/JavaGuide/blob/master/docs/database/MySQL Index.md
https://juejin.cn/post/6844903645125820424