mysql 索引

本文深入探讨了数据库索引的作用,包括加快查询速度、优化查询方式,并详细阐述了等值查询、范围查询、模糊查询和JOIN、ORDER BY操作如何利用索引。介绍了聚簇与非聚簇索引、主键和普通索引的区别,以及B+树的数据结构和InnoDB的索引实现。同时,讨论了如何创建和使用索引以提高查询效率,包括索引维护、慢查询优化以及执行计划分析。此外,还提到了避免过多索引和考虑更新频率等因素的重要性。
摘要由CSDN通过智能技术生成

索引的目的

  • 加快查询速度,查询优化最有效的手段

可以使用索引语法

  • 查询条件
    • 等值:=
    • 范围:> < betewm in
    • 模糊查询:like,索引最左匹配原则
    • and or
  • join:利用索引关联
  • order by:利用索引有序

索引类型

  • 聚簇索引和非聚簇索引
  • 主键索引:
  • 普通索引:可以重复
  • 唯一索引:不可重复,NULL可以重复
  • 联合索引:
  • 全文索引:倒排索引

索引数据结构

  • hash
  • B+树
    • 二叉搜索树:二叉,不一定平衡
    • B树:
      • 多路搜索树,适合硬盘/文件系统特点,按块读写
      • 自动层次控制,防止数据倾斜
      • 数据分布在所有节点中,
        • 单次查询效率可能高
        • 范围查询的效率低
    • B+树:继承B树特点,不同的是
      • 数据分布在叶子节点中,可以使用有限的内存空间存放更多的索引
      • 叶子节点链表间通过双向指针连接形成有序链表,适合范围查询
      • innodb:怎么算索引层数
        • 从information_schema:存放的是元数据,可以查的表定义,行数,空间大小,也可以间接查层数:
          • 参考:https://blog.csdn.net/qq_41999455/article/details/104946754
        • 一个bigint:8字节+指针6字节,一个page 16K,一个page可以存放1000个节点

innodb的索引实现/存储结构

  • page,16K
    • 页内每条记录通过单项指针相连,记录全局有序
    • 页有页目录,二分查找
    • 这边对应order by
  • 主键索引:主键+页号
  • 二级索引:索引列值+主键+页号, 逻辑上相当于(索引列值+主键)联合索引

innodb怎样使用索引加快查询

  • 见查询语句的执行

怎么良好使用索引机制

  • 使用索引
    • 执行计划,索引优化
      • 注意mysql查询优化器,基于评估量的
    • 性能监控,直接查看执行记录
    • 强制走索引:force index,最好不要用
  • 建立索引
    • 索引使用监控
    • 一般经验
      • 经常使用的:where+join on
      • 有区分度的(基数小的)
        • 男女的没用
      • 索引长度小,有一定区分度就可以了
        • 比如很长的字段,就建立前几个
      • 联合索引注意顺序
      • 二级索引-回表-覆盖索引:Extra:Using index
        • 索引下推:5.6引入的优化机制吧
          • 组合索引时,判读其他条件,减少回表次数
          • 组合索引name,age。查询条件 name like ‘张%’ and age=10。
          • 没有索引下推只会看name,有索引下推会过滤age,减少回表次数
      • 主键最好是单调递增
        • 基本是顺序写入,数据文件紧凑
        • 记录不改位置,二级索引就不用变更
        • 引申出一个频繁更新,删除,会产生大量的碎片,影响查询效率
          • 更新是因为变长字段,所以能用定长就定长
          • 删除是打个标记
          • 碎片会评估后整理,可以手动整理
          • 插入:页分裂
          • 页合并
      • 索引不是越多越好,评估后该加就加
      • 更新频繁的列不建索引
      • 大文本,大对象不建索引

mysql执行计划怎么看

  • explain
    • id:执行顺序,
      • id相同从上到下,
      • id不同从小到大
    • table 表名
    • type 类型
    • key 使用的索引
    • rows 扫描行数的预估量
    • extra 额外的信息,比如排序信息,索引下推等等

慢查询

  • 开启慢查询日志
  • 分析sql语句
    • 额外数据,不需要的行和列
    • limit优化
    • 索引
    • 关联
  • 执行计划
  • 性能分析

千万级大表优化

mysql innodb和myisam

  • myisam基本上是一个表,非常简单
  • innodb
  • 事务
  • 外键
  • 读写效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值