• mysql的索引分类


    索引分类

    MySQL 数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。
    分类
    含义
    特点
    关键字
    主键
    索引
    针对于表中主键创建的索引
    默认自动创建 , 只能有一个
    PRIMARY
    唯一
    索引
    避免同一个表中某数据列中的值重复
    可以有多个
    UNIQUE
    常规
    索引
    快速定位特定数据
    可以有多个
    全文
    索引
    全文索引查找的是文本中的关键词,而不是比较索引中的值
    可以有多个
    FULLTEXT

    聚集索引、二级索引

    InnoDB 存储引擎中,根据索引的存储形式,又可以分为以下两种
    分类
    含义
    特点
    特点
    聚集索引 (Clustered Index)
    将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据
    必须有 , 而且只 有一个
    二级索引 (Secondary Index)将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键
    将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键
    可以存在多个
    聚集索引选取规则
    1. 如果存在主键,主键索引就是聚集索引。
    2. 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
    3. 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索

    1. 聚集索引的叶子节点下挂的是这一行的数据 。
    2. 二级索引的叶子节点下挂的是该字段值对应的主键值。

    当我们执行如下的SQL语句时 select *from user where name='Arm'; 具体过程如下:

    1. 由于是根据name字段进行查询,所以先根据name='Arm'name字段的二级索引中进行匹配查找。但是在二级索引中只能查找到 Arm 对应的主键值 10
    2. 由于查询返回的数据是*,所以此时,还需要根据主键值10,到聚集索引中查找10对应的记录,最终找到10对应的行row
    3. 最终拿到这一行的数据,直接返回即可。
    回表查询: 这种先到二级索引中查找数据,找到主键值,然后再到聚集索引中根据主键值,获取
    数据的方式,就称之为回表查询。

     问题

    以下两条 SQL 语句,那个执行效率高 ? 为什么?(备注 : id 为主键, name 字段创建的有索引;)
    A. select * from user where id = 10 ;
    B. select * from user where name = 'Arm' ;
    解答:
    A 语句的执行性能要高于 B 语句。
    因为 A 语句直接走聚集索引,直接返回数据。 而 B 语句需要先查询 name 字段的二级索引,然
    后再查询聚集索引,也就是需要进行回表查询。
  • 相关阅读:
    公众号搭建教程
    MySQL 慢查询
    企业年会直播来个虚拟舞台场景如何?
    3.旅行家-完全背包
    R语言【数据集的导入导出】
    运维监控系统
    基于JAVA图书管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
    财产清查概述、 全面清查的情况、局部清查的情况、财产清查的方法、财产清查结果的处理
    基于案例分析 MySQL Group Replication 的故障检测流程
    重温经典,曾经风靡一时的阿里内网Redis开发参考手册
  • 原文地址:https://blog.csdn.net/qq_63431773/article/details/132782799