mysql学习笔记-索引优化与查询优化

server/2025/1/21 15:23:15/

1.索引失效的几种情况

1.1 全值匹配我最爱
1.2 最佳左前缀法则
1.3 主键插入顺序,主键不是递增,可能造成页分裂、性能损耗
1.4 计算、函数、类型转换(自动或手动)导致索引失效
1.5 类型转换导致索引失效
1.6 范围条件右边的列索引失效
CREATE INDEX idx_age_classId_name on student(age,classId,NAME);
EXPLAIN SELECT SOL NO CACHE * FRoM studentWHERE student,age=30 AND student.classId>20 AND student.name = ‘abc’ ;
在这里插入图片描述
因为classid 使用了范围条件,导致name索引没用上。
1.7 不等于(!= 或者<>)索引失效
1.8 is null可以使用索引,is not null无法使用索引
1.9 like以通配符%开头索引失效
1.10 OR前后存在非索引的列,索引失效
1.11 数据库和表的字符集统一使用utf8mb4
不同的字符集进行比较前需要转换,会造成索引失效。

2.关联查询优化

2.1、整体效率比较:INLJ>BNLJ>SNLJ
2.2 、永远用小结果集驱动大结果集(其本质就是减少外层循环的数据数量)(小的度量单位指的是 表行数"每行大小
2.3 、为被驱动表匹配的条件增加索引(减少内层表的循环匹配次数)
2.4 、增大join buffer size的大小(一次缓存的数据越多,那么内层包的扫表次数就越少)
2.5 、减少驱动表不必要的字段査询(字段越少,join buffer 所缓存的数据就越多)
两个结论:
对于内连接来说,查询优化器可以决定谁作为驱动表,谁作为被驱动表出现的
对于内连接来讲,如果表的连接条件中只能有一个字段有索引,则有索引的字段所在的表会被作为被驱动表

3.JOIN语句原理

3.1、Simple Nested -Loop Join(简单嵌套循环连接)

类似于java程序中双重嵌套循环一样

3.2、Index Nested-Loop Join(索引嵌套循环连接)

连接条件使用到了索引

3.3、Block Nested-Loop Join(块嵌套循环连接)

不再是逐条获取驱动表的数据,而是一块一块的获取,引入了join buffer缓冲区,将驱动表join相关的部分数据列(大小受ioin bufer的限制)缓存到ioin bufer中,然后全表扫描被驱动表,被驱动表的每一条记录一次性和joinbuffer中的所有驱动表记录进行匹配(内存中操作),将简单嵌套循环中的多次比较合并成一次,降低了被驱动表的访问频率。单条数据匹配变成批量匹配。


http://www.ppmy.cn/server/160217.html

相关文章

Spring Boot安全加固:基于Spring Security的权限管理

引言 在当今数字化时代&#xff0c;随着企业信息化程度的不断提高&#xff0c;应用程序的安全性成为了一个至关重要的问题。Spring Boot 作为 Java 生态系统中广泛使用的开发框架&#xff0c;以其简洁、高效的特点深受开发者的喜爱。然而&#xff0c;仅仅依靠 Spring Boot 的默…

ACL基础理论

ACL ——访问控制列表 ACL属于策略的一种 ACL访问控制列表的作用&#xff1a; 访问控制&#xff1a;在路由器流量流入或流出的接口上&#xff0c;匹配流量&#xff0c;然后执行设定好的动作&#xff1a;permit&#xff08;允许&#xff09;、deny&#xff08;拒绝&#xff…

某国际大型超市电商销售数据分析和可视化

完整源码项目包获取→点击文章末尾名片&#xff01; 本作品将从人、货、场三个维度&#xff0c;即客户维度、产品维度、区域维度&#xff08;补充时间维度与其他维度&#xff09;对某国际大型超市的销售情况进行数据分析和可视化报告展示&#xff0c;从而为该超市在弄清用户消费…

光谱相机如何还原色彩

多光谱通道采集 光谱相机设有多个不同波段的光谱通道&#xff0c;可精确记录每个波长的光强信息。如 8 到 16 个甚至更多的光谱通道&#xff0c;每个通道负责特定波长范围的光信息记录。这使得相机能分辨出不同光谱组合产生的相同颜色感知&#xff0c;而传统相机的传感器通常只…

解决github无法clone的问题

问题背景 (base) ~$ git clone https://github.com/isaac-sim/IsaacLab.git 正克隆到 IsaacLab... fatal: 无法访问 https://github.com/isaac-sim/IsaacLab.git/&#xff1a;gnutls_handshake() failed: Error in the pull function.解决办法 我使用了代理&#xff0c;需要配…

MySQL中的通配符

1. 百分号% 内部工作原理&#xff1a; 代表零个、一个或多个任意字符。LIKE A%&#xff1a;MySQL会从索引&#xff08;如果存在&#xff09;中查找所有以 “A” 开头的记录。如果没有索引&#xff0c;则需要扫描整个表。MySQL解析器将模式转换为可执行的形式&#xff0c;并利…

(7)(7.2) 围栏

文章目录 前言 1 通用设置 2 围栏类型 3 破坏栅栏行动 4 使用 RC 通道辅助开关启用栅栏 5 自动高度规避 6 在任务规划器中启用围栏 7 用于遥控飞行训练 8 MAVLink 支持 前言 ArduPilot 支持基于本机的圆柱形&#xff08;“TinCan”&#xff09;和多边形和/或圆柱形、…

梯度提升决策树树(GBDT)公式推导

### 逻辑回归的损失函数 逻辑回归模型用于分类问题&#xff0c;其输出是一个概率值。对于二分类问题&#xff0c;逻辑回归模型的输出可以表示为&#xff1a; \[ P(y 1 | x) \frac{1}{1 e^{-F(x)}} \] 其中 \( F(x) \) 是一个线性组合函数&#xff0c;通常表示为&#xff…