• mysql学习笔记索引


    学习mysql 笔记  https://www.cnblogs.com/lisq/p/12634457.html

    mysql索引分类

    1.主键索引,聚集索引:叶子节点存储的是数据行,

    2.非主键索引,非聚集索引:叶子节点存储的是对应的主键值

    主键索引,默认是主键,如果没有主键,mysql会自动生成一个字段作为聚聚索引。

    聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。
    因为B+TREE的原因,最好使用连续的整数字段,更好确定查找访问范围

    回表

    根据上面的索引结构说明,主键索引和普通索引的查询区别

    • 如果语句是 select * from T where ID=500,即主键查询方式,则只需要搜索 ID 这棵 B+ 树;
    • 如果语句是 select * from T where k=5,即普通索引查询方式,则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次。这个过程称为回表

    覆盖索引

    如果执行的语句是 select ID from T where k between 3 and 5,这时只需要查 ID 的值,而 ID 的值已经在 k 索引树上了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引 k 已经“覆盖了”我们的查询需求,我们称为覆盖索引。

    索引下推

    索引下推是MySQL5.6版本推出的优化手段
    默认是开启的,可以通过下面命令关闭

    SET optimizer_switch = 'index_condition_pushdown=off';
    

    假如有一下SQL,不通的执行过程,如下图表示

    index(name,age)
    mysql> select * from tuser where name like '张%' and age=10 and ismale=1;
    

    可以看到,无索引下推是,每次都需要回表查询,而下推的是在先过滤好结果集,回表拿select * 的数据

    383bb1758fe63222df3e77351a5833e9.png
    无索引下推
    55d51dfd12aa0cf3b4b6a31a117377f4.png
    有索引下推

  • 相关阅读:
    虹软人脸识别在 linux中so文件加载不到的问题
    tomcat 控制台乱码问题
    sourceTree git 空目录从远程仓库克隆代码出现warning: templates not found
    springboot项目更改代码后实时刷新问题
    spring 3.0 整合redis
    随笔
    Centos 7 安装 FFmpeg
    Postgresql 查看当前数据库所有的触发器
    oracle只导出触发器
    oracle 批量删除触发器
  • 原文地址:https://www.cnblogs.com/xiaohouye/p/16204287.html
Copyright © 2020-2023  润新知