Mysql最左匹配原则和索引下堆

news2024/11/25 19:48:52

前言:

最左匹配的基础是联合索引

联合索引

联合索引也称为符合索引,适用于多条件查询
简单说,它是按多个列建立起来的索引,此外联合索引也是有顺序的。
如下图,以A列和B列建立复合索引,某一层节点,记录了从索引(5, 8)到(8, 3),这个值可能来自哈希映射。也可能本身就是代表一定含义。
在这里插入图片描述
InnoDB会使用主键索引B+树维护索引和数据文件,同样联合索引(A, B)也会生成一个B+树。对于建立的索引,如右图,按从左到右建立的索引内部排序是先以A有序,当A数值相等,再根据B排序
所以会有如下规律:

  1. 因为A才有序,所以用B=1,或单纯用B作为查询条件无法使用索引,因为联合索引按最左匹配原则,以左边A开始建立索引。
  2. 当最左匹配原则遇上范围查询,就会停止,比如A=1,B=2,A,B都可以使用索引,而A>1 and B = 2,A可以用索引,而B不行,因为A值是范围,而这个范围内的B无序。所以索引会失效。
  3. 当A值相等的情况下,B值是按值排序的,这种顺序是局部的,但是A > 1 and B = 2,A 字段可以匹配上索引,但 B 值不可以,因为 A 的值是一个范围,在这个范围中 B 是无序的。

联合索引查询流程
InnoDB会使用主键索引,同样联合索引(A, B)也会生成B+树,只不过
联合索引B+树的data存储的是联合索引所在行的主键值
所以**涉及回表*。

最左匹配原则

最左优先,以最左边为起点任何连续的索引都能匹配上,但遇到范围查询,就会停止匹配。这和联合索引的构建方式即存储结构有关系。
简答说,问最左匹配就讲联合索引的构建规则
最左匹配原则说明:
· 如果查询A =1,A字段能用上索引,根据最左匹配原则,即索引是按A列构建的,数据自然全局有序
· 如果查询A=1,and B=2,A,B字段都能用索引,MySQL查询优化器会判断纠正这条SQL语句应该以什么顺序执行效率最高,最终还是会使用到最左匹配原则。
· 若查B=2,也能用到索引,用explain()结果中的type字段是一个index,与all区别在于它只遍历索引树,这也比单纯的全表扫描要快,但是远不如上面三种,而上述的type字段是ref。

索引下堆

需求:检索出表中名字第一个字是张,而且没有删除的信息(is_del = 1)
select * from t_user where name like '张%' and is_del=1
mysql5.6之前,非聚簇或者联合索引也属于非聚簇索引,最后找到的索引B+树节点对应值只是某一行的主键,所以还需要再去根据当前主键去寻找,这个过程是回表。而索引下堆能够解决联合索引的回表问题。
其实张开头的这种模糊查询,找到所有张后,每条张的数据都回表一次,使用索引下堆,会先检查索引字段中是否包含了查询过程中的字段,如果不符合,就先去掉,这样就减少了回表次数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/782516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习路之PHP--计算2个坐标点之间距离、时间比较

一、计算2个坐标点之间距离 /** * 根据起点坐标和终点坐标测距离 * param [array] $from [起点坐标(经纬度),例如:array(118.012951,36.810024)] * param [array] $to [终点坐标(经纬度)] * param [bool] $km 是否以公里为单位 false:米 true:公里(千米) …

matlab pcnormals()函数的功能 详解

官方解释: pcnormals - Estimate normals for point cloud This MATLAB function returns a matrix that stores a normal for each point in the input ptCloud. normals pcnormals(ptCloud) normals pcnormals(ptCloud,k) 输入参数 ptClo…

捷米特PROFINET总线协议网关介绍

关于PROFINET PROFINET由PROFIBUS国际组织(PROFIBUS International,PI)推出,是新一代基于工业以太网技术的自动化总线标准。 PROFINET为自动化通信领域提供了一个完整的网络解决方案,囊括了诸如实时以太网、运动控制…

详解 Linux 常用命令

目录 简单介绍 Linux 左侧信息栏 命令 ls ll cd pwd ctrl l touch cat man echo vim vimtutor mkdir rm cp mv grep ps 面试题: 简单介绍 当我们说"Linux"时,通常指的是一种开源的计算机操作系统。Linux 是一个基于 UNIX 操作系…

24.实现线性拟合和相关系数(matlab程序)

1.简述 1. 基本语法 1.1 corr函数基本语法 语法 说明 rho corr(X) 返回输入矩阵X中每对列之间的两两线性相关系数矩阵。 rho corr(X, Y) 返回输入矩阵X和Y中每对列之间的两两相关系数矩阵。 [rho, pval] corr(X, Y) 返回pval,一个p值矩阵&#xff0c…

SpringBoot静态资源访问及参数处理

静态资源访问: 资源访问: 1:Spring Boot 支持静态和模板化的欢迎页面。它首先在配置的静态内容位置中查找index.html文件。如果未找到,则查找index相关模板。如果找到任一,它将自动用作应用程序的欢迎页面。 2&…

【单片机】MSP430F149单片机,晨启,音乐播放器,蜂鸣器音乐

四、音乐播放器 任务要求: 设计制作一个简易音乐播放器(通过手柄板上的蜂鸣器发声,播放2到4首音 乐),同时LED模块闪烁,给人视、听觉美的感受。 评分细则: 按下播放按键P15开始播放音乐&#x…

MCP4725介绍和STM32模拟IC2驱动

一.MCP4725 简单总结为下面几个特点。 1路DAC输出 12位分辨率 I2C 接口(标准,快速,高速支持) 供电电压2.7-5.5 内部EEPROM存储设置 I2C地址可配置(A0)(A1、A2内置,默认为‘00’&…

『Dubbo SPI源码分析』@Adaptive 机制分析

『Dubbo SPI源码分析』Adaptive 机制分析 基于 2.7.0 版本上一章:『Dubbo SPI源码分析』依赖注入机制分析 创建测试 demo 首先创建一个接口,举例为 Car package com.luban.dubbo_spi.api;SPI public interface Car {public void getColor();Adaptive…

pycharm中运行py文件时,报错:找不到自己编写的包等目录问题ModuleNotFoundError: No module named ‘xxx‘

【问题描述】:pycharm中运行py文件时,报错:找不到自己编写的包等目录问题 【报错】: ModuleNotFoundError: No module named ‘xxx’ ERROR: file not found 【问题定位】:运行的py文件和用到的包或者数据不在同一个文件目录下时…

【HanLP】--自然语言处理场景应用

目录 一、前言二、Springboot集成HanLP三、HanLP分词四、HanLP的关键字提取一、前言 HanLP 是由一系列模型与算法组成的工具包,主要功能包括分词、词性标注、关键词提取、自动摘要、依存句法分析、命名实体识别、短语提取、拼音转换、简繁转换等等。 下面将介绍HanLP如何本地…

PHP swoole从入门到精通(一、如何安装swoole及phpStorm服务端代码同步设置)

swoole安装直接在宝塔后台-》安装扩展 phpStorm服务端代码同步设置 https://www.cnblogs.com/yszr/p/9009961.html 软件下载地址 代码上传下载,鼠标右击任何一个文件或者文件夹,选择 Development->上传/下载/同步 点击工具栏Tools->Development…

前端个人年终工作总结精选7篇

一、工作总结的种类 1、按总结的时间分,有年度总结、半年总结、季度总结、学期总结。进行某项重大任务时,还要分期总结或叫阶段总结。 2、按总结的范围分,有单位总结、个人总结、综合性总结、专题总结等。 3、按总结的性质分,有…

科普 | OSI模型

本文简要地介绍 OSI 模型 1’ 2’ 3。 更新:2023 / 7 / 23 科普 | OSI模型 术语节点链路协议网络拓扑 概念作用结构应用层表示层会话层传输层网络层数据链路层物理层 数据如何流动OSI 和TCP/IP 的对应关系和协议参考链接 术语 节点 节点( Node &#…

vue基本语法(个人学习笔记一)

目录 友情提醒第一章、vue概述1.1)vuej介绍1.2)Vue 周边库1.3)MVVM的思想 第二章、借助CDN使用Vue2.1)vue简单引入:引入js文件2.2)简单的Vue程序 第三章、vue的基本语法3.1)Vue的数据绑定&#…

在工作中如何对文件进行批量标记和编号

大家在日常工作中,是如何给文件该或文件夹批量重命名或添加编号,有没有怎么好的方法,可以一键批量操作。 经过小编多次操作经验,得到一个结论,可以通过《文件批量改名高手》对这些文件进行批量标记和编号,…

WebGL 概念和基础入门

WebGL 概念和基础入门 WebGL 是什么 对于 WebGL 百度百科给出的解释是 WebGL 是一种 3D 绘图协议,而对此维基百科给出的解释却是一种 JavaScript API。由于 WebGL 技术旨在帮助我们在不使用插件的情况下在任何兼容的网页浏览器中开发交互式 2D 和 3D 网页效果&…

win10 远程桌面连接如何打开?(Win10常用快捷键总结)

一、dos窗口下输入命令 mstsc 当然用向日葵还是更简单,更好用一些。 二、常用DOS命令 以下是一些常用的 DOS 命令: dir:列出当前目录中的文件和子目录。cd:改变当前目录。md:创建一个新的目录。rd:删除…

QT+VS2019 环境搭建

一、概述 一个PC-QT 的跨平台项目要维护。需要搭建一套环境。使用的是QTVS2019的环境。 QT使用v5.9.3的版本 (这个版本qalgorithms.h文件要替换成新的,源码附在文尾)vs插件使用qt-vsaddin-msvc2019-2.7.1.vsix 二、安装 无脑安装上文的QT5.9.3 和qt-vsaddin-msv…

LeetCode1143.Longest-Common-Subsequence<最长公共子序列>

题目: 思路: 我也不会,看出来了是动态规划,然后想着用sort试试. 看的题解.每一次扫描 双重for循环扫描字符(感觉这和一个个对比双指针区别不大了)..这动态规划也太笨重. 循环扫描数组。当字符相同的时候 1,否则等于它们之前较大的那一个。…