• MySQL 索引


    MySQL 索引

    什么是索引?

    用来高效获取数据的数据结构。
    查询:无索引时:全表查询;有索引时,高效。
    在这里插入图片描述

    索引结构

    在这里插入图片描述
    大部分存储引擎都支持B+树索引
    红黑树在大数据量情况下,层级较深,检索速度慢。
    B+树:1、所有元素出现在叶子节点;叶子节点形成单向链表

    MySQL索引数据结构 – 在B+树的基础上,增加了一个指向相邻叶子节点的链表指针。带有顺序指针的B+Tree提高了区间访问的性能。

    在这里插入图片描述

    为什么使用B+树?
    • B+树,一个页中能够存放的key和指针更多,相同数据量下,层数更少
    • 搜索效率稳定
    • 便于范围搜索和排序
    • hash索引,不支持范围查询和排序
    索引分类
    • 主键索引 :针对主键创建的索引
    • 唯一索引 : 避免数据列中的值重复,加了唯一约束的列字段创建唯一索引
    • 常规索引 --》 快速定位
    • 全文索引 --》 查找文本中的关键词
    索引分类
    • 聚集索引 必须有,只有一个
      在这里插入图片描述
    • 二级索引 可以存在多个
    索引语法

    在这里插入图片描述

    SQL性能分析
    SQL执行频率

    判断数据库增删改查的哪个为主:

    SHOW GLOBAL STATUS LIKE 'Com_______';
    
    • 1

    在这里插入图片描述
    优化查询为主的数据库

    SQL执行频率
    • 慢查询日志定位执行效率比较低的sql
      在这里插入图片描述

    查看慢查询是否开启:
    在这里插入图片描述
    查看慢查询日志:
    在这里插入图片描述

    • 业务简单但查询时间稍长,也要优化。
    profile详情

    在这里插入图片描述

    查看每一条sql指令的耗时,耗时在哪里
    show profile
    在这里插入图片描述

    explain

    查看sql语句的执行计划,是否用索引,表的连接,连接顺序
    在这里插入图片描述
    在这里插入图片描述

    Type:最反映sql性能。
    possible_key, key, key_len,rows,extra

    索引使用
    • 最左前缀法则:如果使用了联合索引,要遵守最左前缀法则。查询从索引的最左列(最左列一定要存在,可以放在任意位置)开始,不能跳过索引中的列,如果跳过了某一列,后面的字段索引失效
    • 如果有(>,<)范围查询,则范围查询右侧的列索引失效。[范围查询字段仍生效] – >**建议使用 >= <= **
    • 在索引列上进行运算,索引将失效
    • 字符串类型的字段,如果不加’',索引会失效
    • 头部模糊查询,索引会失效
    • or分割开的条件,如果or前的条件中列有索引,而条件后的列中没有索引,那么,涉及的索引都不会被用到。
    • 如果MySQL评估,使用索引会慢于全表查询,则索引失效。

    SQL提示

    • 在SQL语句中加入人为的提示来达到优化操作的目的

    在这里插入图片描述

    • use -->告诉mysql
    • ignore ->忽略索引
    • force 强制
    覆盖索引

    在这里插入图片描述

    前缀索引

    用字符串的一部分前缀建立索引
    在这里插入图片描述
    在这里插入图片描述

    前缀索引:通过前缀索引,回表查询拿到数据,与select语句对比,如果符合,则返回,继续查询下一个元素是否符合前缀,如果下一个元素找到的数据也符合,则组装数据。

    解决大文本字段进行索引时,索引体积太大,浪费磁盘IO的问题

    单例索引和联合索引

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Unknown collation: ‘utf8mb4_0900_ai_ci‘的解决方法
    Linux下C++开发笔记--编译静态链接库和动态链接库
    【U-Boot笔记整理】U-Boot 完全分析与移植
    echarts 轴文字内容太长导致显示不全解决方案
    goland快捷键
    谁有软件测试面试真题(完整答案)?正在找工作的可以收藏一下!
    解析 FXML 表格的使用,图书列表功能的实现
    Kafka3.0.0版本——消费者(独立消费者消费某一个主题中某个分区数据案例__订阅分区)
    C++泛型编程——模板(初识)
    用 Antlr 重构脚本解释器
  • 原文地址:https://blog.csdn.net/yfdddong/article/details/133988812