8.2.1.3 索引合并优化
索引合并访问方法检索具有多个范围扫描的行,并将其结果合并为一个。此访问方法仅合并来自单个表的索引扫描,而不是跨多个表的扫描。合并可以生成其基础扫描的合并、交叉或交叉的合并。
可以使用索引合并的查询示例:
SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;SELECT * FROM tbl_nameWHERE (key1 = 10 OR key2 = 20) AND non_key = 30;SELECT * FROM t1, t2WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE 'value%')AND t2.key1 = t1.some_col;SELECT * FROM t1, t2WHERE t1.key1 = 1AND (t2.key1 = t1.some_col OR t2.key2 = t1.some_col2);
注意
索引合并优化算法具有以下已知限制:
- 如果您的查询有一个复杂的
WHERE子句,带有深度AND/OR嵌套,并且 MySQL 没有选择最佳方案,请尝试使用以下标识转换来分散项目:(x AND y) OR z => (x OR z) AND (y OR z) (x OR y) AND z => (x AND z) OR (y AND z)
- 索引合并不适用于全文索引。
在 EXPLAIN 输出中,索引合并方法在 type 列中显示为 index_merge 。 在本例中,key 列包含使用的索引列表,key_len 包含这些索引的最长键部分列表。
索引合并访问方法有几种算法,显示在 EXPLAIN 输出的 Extra 字段中:
- 使用
intersect(...) - 使用
union(...) - 使用
sort_union(...)
以下各节将更详细地描述这些算法。优化器根据各种可用选项的成本估计,在不同的索引合并算法和其他访问方法之间进行选择。
- 索引合并交叉访问算法
- 索引合并合并访问算法
- 索引合并排序合并访问算法
- 影响索引合并优化
索引合并交叉访问算法
当 WHERE 子句被转换为与 AND 组合的不同键上的多个范围条件时,该访问算法适用,并且每个条件都是以下条件之一:
- 此形式的 N 部分(一般为列或包含列的表达式)表达式,其中索引正好有 N 个部分(即覆盖所有索引部分):
key_part1 = const1 AND key_part2 = const2 ... AND key_partN = constN - InnoDB 表主键上的任何范围条件。
例如:
SELECT * FROM innodb_tableWHERE primary_key < 10 AND key_col1 = 20;SELECT * FROM tbl_nameWHERE key1_part1 = 1 AND key1_part2 = 2 AND key2 = 2;
索引合并交叉算法对所有使用的索引执行同时扫描,并生成从合并索引扫描中接收的行序列的交叉。
如果查询中使用的所有列都被使用的索引覆盖,则不会检索完整的表行(在本例中,EXPLAIN 输出包含在 Extra 字段中使用索引)。下面是这样一个查询的示例:
SELECT COUNT(*) FROM t1 WHERE key1 = 1 AND key2 = 1;
如果使用的索引未覆盖查询中使用的所有列,则仅当满足所有使用的键的范围条件时才检索完整的行。
如果合并条件之一是 InnoDB 表主键上的条件,则它不用于行检索,而是用于过滤使用其他条件检索的行。
索引合并合并访问算法
该算法的标准与索引合并交叉算法的标准相似。当将表的 WHERE 子句转换为不同键上的多个范围条件并结合 OR 时,该算法适用,并且每个条件都是以下条件之一:
- 此形式的 N 部分表达式,其中索引正好有 N 个部分(即覆盖所有索引部分):
- InnoDB 表主键上的任何范围条件。
- 索引合并交叉算法适用的条件。
示例:
SELECT * FROM t1WHERE key1 = 1 OR key2 = 2 OR key3 = 3;SELECT * FROM innodb_tableWHERE (key1 = 1 AND key2 = 2)OR (key3 = 'foo' AND key4 = 'bar') AND key5 = 5;
索引合并排序合并访问算法
当 WHERE 子句转换为由 OR 组合的多个范围条件而索引合并合并算法不适用时,此访问算法适用。
SELECT * FROM tbl_nameWHERE key_col1 < 10 OR key_col2 < 20;SELECT * FROM tbl_nameWHERE (key_col1 > 10 OR key_col2 = 20) AND nonkey_col = 30;
排序合并算法和合并算法之间的区别在于,排序合并算法必须首先获取所有行的行 ID ,并在返回任何行之前对它们进行排序。
影响索引合并优化
索引合并的使用取决于 optimizer_switch 系统变量的 index_merge 、index_merge_intersection 、index_merge_union 、和 index_merge_sort_union 标志的值。参见 第 8.9.2 节 “可切换优化” 。默认情况下,所有这些标志都处于启用状态。若要仅启用某些算法,请将 index_merge 设置为禁用,并仅启用应允许的其他算法。
除了使用 optimizer_switch 系统变量控制优化器在会话范围内使用索引合并算法之外,MySQL 还支持优化器提示,以按语句影响优化器。参见 第 8.9.3 节“优化器提示” 。
相关文章:
8.2.1.3 索引合并优化
索引合并访问方法检索具有多个范围扫描的行,并将其结果合并为一个。此访问方法仅合并来自单个表的索引扫描,而不是跨多个表的扫描。合并可以生成其基础扫描的合并、交叉或交叉的合并。 可以使用索引合并的查询示例: SELECT * FROM tbl_name…...
水雨情在线小能手-雨量水位报警站
雨量水位报警站由水位探测器、雨量传感器、报警灯、扩音器、太阳能板和采集传输控制器组成。实时采集水位等级,三个水位探测器对应3个水位等级,当现场水面浸没相应探测器时,本机会实时发出语音报警,同时可发送相应的预警/报警等级…...
【蓝桥杯集训4】双指针专题(6 / 6)
目录 3768. 字符串删减 - 滑动窗口ac 799. 最长连续不重复子序列 - 滑动窗口 800. 数组元素的目标和 - 二分ac 2816. 判断子序列 - 双指针 1238. 日志统计 - 滑动窗口 1240. 完全二叉树的权值 - 双指针 1、前缀和 - 通过了 5/12个数据 2、双指针 3768. 字符串删减 -…...
文件流,gzip解压,压缩
目录 文件画布 写入 (空文件Foutnew File(Parent,entry.getName());)FileOutputStream outnew FileOutputStream(Fout);BufferedOutputStream Boutnew BufferedOutputStream(out);其他流量基于基础包装文件--文件流---字节流 顺序pbf一般是形成后再压缩目…...
在线开会,来开开圆桌会议吧~
圆桌会议应用场景:适合内部培训、部门会议亦或是头脑风暴等较为轻松的场景,有兴趣的朋友可以联系我来测试哦~~ 上图: 图:圆桌会议应用截图 在圆桌布局之下,企业可以将每一位参会者和座位绑定,1:1模拟线下圆…...
使用营销自动化的 7 大主要优势
对于大多数企业家来说,自动化已成为在数字时代简化业务的必要条件。那么,您可以采取哪些步骤来实施营销自动化呢? 1. 社交媒体整合 拥有吸引人的社交媒体形象是成功的先决条件。您不可能完成所有社交媒体营销任务,使用自动化软件&…...
【图像分类】基于PyTorch搭建GRU实现MNIST手写数字体识别(单/双向GRU,附完整代码和数据集)
写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 在https://blog.csdn.net/AugustMe/article/details/128969138文章中,我们使用了基于PyTorch搭建LSTM实现MNIST手…...
day14_oop_抽象_接口
今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、抽象 三、接口 零、 复习昨日 多态的好处: 扩展性强.加入新的功能,不需要改动代码降低代码耦合度(解耦合或者松耦合) 一、抽象类 1.1 抽象类…...
模式识别 | MATLAB实现DNN深度神经网络模式分类识别
分类预测 | MATLAB实现DNN全连接神经网络多特征分类预测 目录 分类预测 | MATLAB实现DNN全连接神经网络多特征分类预测基本介绍任务描述程序设计参考资料基本介绍 DNN的结构不固定,一般神经网络包括输入层、隐藏层和输出层,一个DNN结构只有一个输入层,一个输出层,输入层和输…...
【C++】类和对象三大特性--继承
文章目录1.继承的概念及定义1.1继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符1.2.3继承基类成员访问方式的变化2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6. 继承与静态成员7.复杂的菱形继承及菱形虚拟继承虚拟继承解决数…...
MySQL的存储引擎
目录 一.概念 二.分类 操作 修改默认存储引擎 一.概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在许多不…...
工程项目管理系统源码-简洁+好用+全面-工程项目管理系统
工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 系统定义 工程项目管理企业不直接与该工程项目的总承…...
什么是STAR原则?
文章目录📋前言🔥省流版🎯什么是STAR原则🎯进行过程📋前言 对于大部分还在学习阶段的学生们来说,可能并不了解这个原则的含义,这里的star并不是指英文单词星星。这个原则我也是前段时间才认识到…...
前置知识-初值问题、显式隐式龙格库塔方法、Butcher阵列
1.1.4 龙格一库塔法 将向前欧拉法写成式 (1-37) 的形式, 可以看出它实际上利用了 f ( x , u ) f(x, u) f(x,u) 在 x n...
PythonWeb Django PostgreSQL创建Web项目(二)
安装数据库PostgreSQL并创建数据库 我第一次尝试使用PostgreSQL数据库,why?我喜欢它提供的丰富的数据类型,例如货币类型、枚举类型、几何类型(点、直线、线段、矩形等等)、网络地址类型、文本搜索类型、XML类型JSON类型等等,非常…...
Python学习笔记:使用字符串
使用字符串 使用字符串格式:精简版 百分号 % # 指定要设置其格式的值时,可使用单个值(如字符串或数字),可使用元组(如果要设置多个值得格式),还可使用字典 >>> format …...
echarts饼图封装
1. 组件 <template> <div :id"id" class"main" :style"{ width: width, height: height }" :ref"id" ></div> </template> <script> import * as echarts from "echarts"; export default { …...
Web3.0 教学基础一
目录 什么是web3.0 Web 1.0 概念 Web 2.0 概念 Web 3.0 概念 Web 3.0 的优势 什么是DAPP 什么是web3.0 在了解web3.0之前我们需要了解下前面的web1.0与web2.0。 Web 1.0 概念 Web1.0是万维网最初的版本,而静态网站则被认为是全网Web 1.0的起源,用…...
body使用渐变色无效的原因之一:html没有设置高度
直接在css文件中对body设置渐变色: body {height: 100%;background: -webkit-linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);background: -moz-linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);background: -o-linear-gradient(120deg, #a1c4fd 0%, #c2e…...
Python3 函数实例及演示
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。我们已经知道Python提供了许多内建函数,比如print()。但也可以自己创建函数,这被叫做用户…...
OpenClaw跨平台测试:Qwen3-VL:30B在Mac/Win/Linux飞书表现
OpenClaw跨平台测试:Qwen3-VL:30B在Mac/Win/Linux飞书表现 1. 测试背景与动机 去年12月接手团队自动化工具选型时,我们遇到了一个典型困境:团队成员分别使用macOS、Windows和Ubuntu系统,但现有AI助手工具要么绑定特定平台&#…...
MogFace人脸检测惊艳效果:CVPR22模型在极端光照(强逆光/频闪光)下的人脸召回提升实测
MogFace人脸检测惊艳效果:CVPR22模型在极端光照(强逆光/频闪光)下的人脸召回提升实测 你有没有遇到过这样的场景?在逆光下拍的照片,人脸黑成一团,或者是在闪烁的灯光下,人脸忽明忽暗࿰…...
Qwen3-0.6B-FP8部署与Git工作流结合:AI代码审查助手
Qwen3-0.6B-FP8部署与Git工作流结合:AI代码审查助手 你有没有遇到过这种情况?团队里新来的小伙伴提交了一段代码,语法上挑不出大毛病,但总觉得逻辑有点绕,或者命名风格不太统一。你作为资深开发,想提点建议…...
MedGemma-X性能优化:基于CUDA的医疗影像加速处理
MedGemma-X性能优化:基于CUDA的医疗影像加速处理 1. 当医生等结果的时间,能不能再短一点? 上周陪家人做肺部CT复查,从扫描结束到拿到报告,中间隔了近40分钟。放射科医生说,现在AI辅助系统已经能帮着初筛&…...
NSSCTF题包(脱壳类和SMC)
题包里的这些类型的题这些已经接触了很长时间,但是仍然需要进行巩固,在这里先感谢师傅们还有胡楚昊大佬对我的帮助和支持这套题还有去花类的,前面文章讲过了脱壳类:主要应用的是自动脱壳以及ESP定律法手动脱壳ESP定律法࿱…...
SkeyeVSS中国标GB28181、流媒体源RTMP/RTSP/HTTP/ONVIF、RTMP推流等协议视频流实时播放流程详解
本文基于 core/app/sev/vss/internal/logic/http/video/stream_play.go 的源码:从参数与设备查询,到按接入协议分支、触发 MS 拉流或 GB28181 Invite,再到返回 StreamResp 与异步处理。 源码地址 点击直达 一、接口入口与请求体 项目说明…...
OpenClaw多模型切换:nanobot镜像动态加载不同规格Qwen
OpenClaw多模型切换:nanobot镜像动态加载不同规格Qwen 1. 为什么需要动态切换模型 在本地部署AI助手时,我发现一个痛点:不同任务对模型能力的需求差异很大。简单任务如整理文件、生成周报草稿,用7B参数模型完全够用;…...
中文语义相似度计算新范式:技术演进与实践路径
中文语义相似度计算新范式:技术演进与实践路径 【免费下载链接】Awesome-Chinese-LLM 整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主,包括底座模型,垂直领域微调及应用,数据集与教程等。…...
在VSCode中高效使用cl.exe构建和调试活动文件的AI辅助开发实践
在Windows平台上进行C开发,cl.exe是绕不开的核心编译器。很多朋友习惯在VSCode中写代码,但调试时却不得不先打开那个黑底的“Developer Command Prompt for VS”,再在里面启动VSCode,否则就会遇到找不到cl.exe或者链接库失败的经典…...
基于cosyvoice 2声码器的实时语音合成实战:从选型到生产环境部署
最近在做一个需要实时语音合成的项目,对延迟和音质要求都比较高。调研了一圈声码器,最终选择了cosyvoice 2,并在生产环境成功落地。整个过程踩了不少坑,也积累了一些经验,今天就来分享一下从技术选型到生产部署的完整实…...
