• MySQL的查询访问方式


    Const(常数级别)

    只能是主键列或者唯一二级索引列与一个常数进行等值比较时才生效。---如果主键索引或者唯一二级索引的索引列由多个列构成,则只有在索引列中的每一个列都与常数进行比较时,const访问才有效。

    1. //假设有主键 id 和唯一二级索引 unkey1
    2. select * from table where id = 1
    3. select * from table where unkey1 = 'XXX'
    4. //这条语句不会是const访问方式,因为对于唯一二级索引来讲,可以有多个null
    5. select * from table where unique = null

    Ref

    搜索条件为普通二级索引列与常数进行等值比较,形成的扫描区间为单点扫描区间,采用二级索引来执行查询。---普通的二级索引列并不限制索引列的唯一性

    select * from table where key = 'xxx'
    • 采用二级索引列来执行查询时,每获取到一条二级索引记录,就会立刻对其执行回表操作,而不是将所有二级索引列记录的主键值收集起来再统一回表。
    • 当执行 key is NULL 形式的搜索条件的查询时,最多使用Ref访问方法,不管是唯一二级索引还是普通二级索引
    • 对于索引列中包含多个列的二级索引来说,只要最左边连续的列是与常数进行等值比较,就可以采用ref方法。如果最左边的列不全部是等值比较的话,它的访问方法就不能称为refi
    1. //假设有联合索引 k1,k2,k3
    2. select * from table where k1 = 'XXX' and k2 = 'XXX'
    3. select * from table where k1 = 'XXX' and k2 = 'XXX'
    4. select * from table where k1 = 'XXX' and k2 = 'XXX' and k3 = 'XXX'

    ref_or_null

    不仅可以找出某个二级索引的值等于某个常数的记录,而且还想把该列中值为NULL的记录也找出来。

    select * from table where key1 = 'XXX' OR key1 IS NULL 
    • 先从idx_key索引中分别定位key1 = 'XXX' 和 key1 IS NULL的连续记录,然后找到记录对应的id列的值
    • 值为NULL的记录会被放在索引的最左边

    range

    执行索引查询时,对应的扫描区间为若干个单点扫描区间或者范围扫描区间。

    select * from table where key1 in (38,324) or (key2 >=38 and key2 < 55)
    • 仅包含一个单点扫描区间的访问方法不能称为rang访问方法
    • 扫描区间为(-∞,+∞)的访问方法不能称为rang访问方法

    index

    直接扫描全部记录的二级索引记录。---->例如覆盖索引,不用回表

    1. //假设有联合索引 k1,k2,k3
    2. SELECT id,k1,k2,k3 from table where k2 = 'XXX'
    • 当通过全表扫描对使用InnoDB存储引擎的表执行查询时,如果添加了"ORDER BY"主键的语句,那么该语句的访问方法也会被认为是"index"
    SELECT * FROM table ORDER BY id;

  • 相关阅读:
    JavaSE 第八章 Java常用类
    如何用webgl(three.js)搭建一个3D库房,3D仓库3D码头,3D集装箱,车辆定位,叉车定位可视化孪生系统——第十五课
    MindFusion.Diagramming for WPF V3.8.3
    HFS局域网分享文件的神器(附下载链接)
    Opencv | 直方图
    segment方案解决VXLAN分布式网关DCI间互联
    【Spring(五)】引入篇:一文带你弄懂AOP的底层原理(动态代理)
    ROS1云课→11曲线绘制
    C语言 cortex-A7核UART总线实验
    RabbitMQ学习笔记
  • 原文地址:https://blog.csdn.net/m0_58438555/article/details/126318469