当前位置: 首页 > news >正文

25 mysql like 是否使用索引

前言

这里主要是 探究一下 explain $sql 中各个 type 

诸如 const, ref, range, index, all 的查询的影响, 以及一个初步的效率的判断 

这里会调试源码来看一下 各个类型的查询 需要 lookUp 的记录 

以及 相关的差异 

此系列文章建议从 mysql const 查询 开始看

 

测试表结构信息如下 

 
CREATE TABLE `tz_test` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`field1` varchar(12) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3333343 DEFAULT CHARSET=utf8

 

测试数据为序列 1 – 99

eda96f7dd2a74b91817cba51a3827b8b.png

 

 

like 通配符的位置造成的影响 

执行 sql 如下 “select * from tz_test where field1 like '%field2';”

可以看出, 扫描的是全表 

043fedfc13884effbc855342b12c6c9c.png

 

执行 sql 如下 “select * from tz_test where field1 like 'field%2';”

可以看出, 扫描的是全表 

f3ed35bcf969419b9b76bf9076c55774.png

 

执行 sql 如下 “select * from tz_test where field1 like 'field2%';”

可以看出, 扫描的是部分索引, 这个也是结合了 索引是按照顺序存储的规则来计算的优化

67dec4a867cb47f48dfe4a0caed63ae6.png

 

 

“like 1%” 转换为了 range 查询 

这里从 key_tree 中将数据转换到 PARAM->max_key, 然后 之后更新到传入的 range 中, 以供后面查询使用 

d042606013e04a43b0c08cabd29f7081.png

 

具体的存储的地方是在这里, 将 key_tree 的数据存储到 PARAM->max_keys 中

b27ff0a0a9d9433ab6da9d05fea48c97.png 

数据从 PARAM 转换到 range 中, 后面的查询是使用的这个 range 

ba97df05e7444953a98e0f484e9e8c0d.png 

然后 key_tree 的数据来自于 条件的解析 1d9dfbb2f2814e449f7056231b837e1e.png 

具体的range最大最小边界的 padding 方式如下, 使用 c->min_sort_char, c->max_sort_char 来进行补齐, 这里 c 为 utf8_general_ci

c->max_sort_char 转换为字节序列是就是 0xefbfbf

a0ffe85b50d8482997ae1b1aefe7cc92.png

 

 

进而将如下模糊查询转换为了范围查询

select * from tz_test where field1 like 'field2%';

select * from tz_test where field1 >= 'field2\x0\x0...\x0' and field1 <= 'field2\xef\xbf...\xbf';

 

 

完 

 

 

 

http://www.lryc.cn/news/187035.html

相关文章:

  • Android---Class 对象在执行引擎中的初始化过程
  • Altium Designer实用系列(二)----PCB绘图小技巧
  • threejs-开发入门与调试设置
  • win11安装双系统Ubuntu的坎坷记录
  • 关于docker的xuexi
  • Python接口自动化测试实战详解,你想要的全都有
  • SparkSQL 外部数据源
  • leetcode做题笔记167. 两数之和 II - 输入有序数组
  • [ZJCTF 2019]NiZhuanSiWei - 伪协议+文件包含+反序列化
  • 如何提升和扩展 PostgreSQL — 从共享缓冲区到内存数据网格
  • Elasticsearch:使用 huggingface 模型的 NLP 文本搜索
  • 论文解析——异构多芯粒神经网络加速器
  • MyBatisPlus(十六)逻辑删除
  • 基于黏菌优化的BP神经网络(分类应用) - 附代码
  • C语言基础语法复习08-位域bit-fields
  • 3.2.OpenCV技能树--二值图像处理--图像腐蚀与膨胀
  • 基于FPGA的数字时钟系统设计
  • linux centos Python + Selenium+Chrome自动化测试环境搭建?
  • mysql面试题20:有哪些合适的分布式主键方案
  • git的基础操作
  • lua 中文字符的判断简介
  • SSM-XML整合
  • 线性代数小例子
  • ASP.NET Core 开发 Web API
  • QImage函数setAlphaChannel
  • 区块链、隐私计算、联邦学习、人工智能的关联
  • Unity可视化Shader工具ASE介绍——4、ASE的自定义模板使用
  • FastAPI学习-22.response 异常处理 HTTPException
  • 75.颜色分类
  • 浅谈分散式存储项目MEMO