mysql 09: 索引

索引

什么是索引?作用?

  • 索引相当于一本书的目录,通过目录可以快速找到对应资源
    • 字段没有加索引,sql语句进行全表查询,扫描字段中所有值
    • 字段加索引,sql语句会根据索引扫描,快速定位
  • 数据库方面,查询一条记录的时候有两种检索方式
    • 1:全表扫描
    • 2:根据索引检索
  • 为什么可以提高检索效率
    • 根本原理是减小了扫描范围
  • 注意
    • 不可以随意添加索引,索引也是数据库中的对象
    • 索引也需要维护,有维护成本
    • 表中的数据经常被修改,不适合添加索引,因为数据修改时,索引要修改维护

什么时候考虑加索引

  • 数据量庞大

  • 该字段很少修改

  • 该字段经常出现在where字句中

  • 注意

    • 主键和具有unique约束的字段会自动添加索引
    • 根据主键查询,效率较高

创建和删除索引对象

  • 创建
    • 语法:create index index_name on tb_name(字段名);
  • 删除
    • 语法:drop index index_name on tb_name;

explain

  • 语法:explain sql语句
  • mysql特有
  • 作用:查看sql语句的执行计划

索引底层实现原理

  • 底层数据结构:B + Tree

    • 通过B Tree缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的物理地址
    • 通过索引,获取到数据的物理存储地址
    • 通过物理地址定位数据:最后不再走表的索引

    image

分类

  • 单一索引:给单个字段添加索引
  • 复合索引:给多个字段联合起来添加1个索引
  • 主键索引:主键上会自动添加索引
  • 唯一索引:有unique约束的字段会自动添加索引

索引何时失效

  • 模糊查询:第一个通配符使用'%',这时索引失效
posted @ 2022-07-29 13:10  rocket-raccoon  阅读(26)  评论(0编辑  收藏  举报