mysql怎样优化count(*) from 表名 where …… or ……这种慢sql

news/2024/11/13 6:35:05/

一 问题描述

线上发现一条类似这样的慢sql(查询时长8s):

select id,name,(select count(*) from t14 where t14.id=t15.id or t14.id2=t15.id) as cnt
from t15 ;

t14的id和id2字段上都有索引,但是因为条件里有or,导致走的是全表扫描:

0779299a7f0b487e9c17c02182ef2b9a.png

如果没用count(*),而是select 字段这种方式,那可以用union这种方式替代or,但这里是count(),则有些不同。

二 优化逻辑

将select count(*) from t14 where t14.id=t15.id or t14.id2=t15.id改为以下三种情况:

1、 t14.id=t14.id2,此时t14.id = t15.id与t14.id2=t15.id是等价的,写哪个都可以
2、 t14.id!=t14.id2时,分成两种情况:
① t14.id = t15.id
② t14.id2 = t15.id

三 改写后的sql

select id,name,
(select count(*) from t14 where t14.id=t15.id and t14.id=t14.id2) 
+
(select count(*) from t14 where t14.id=t15.id and ifnull(t14.id,'isnull')!=ifnull(t14.id2,'isnull')
)
+
(select count(*) from t14 where t14.id2=t15.id and t14.id!=t14.id2)
as cnt
from t15 

加ifnull(字段,'isnull')函数是因为发现关联字段是null时,关联不上,所以这里将这些空值转换为了isnull这个字符串。
执行计划走了索引:

0f0f3e0c818f4b6d920e196918aa46d0.png

逻辑看起来比之前复杂了,但是查询时长由8秒降到了1.2秒

 


http://www.ppmy.cn/news/1527531.html

相关文章

21. 什么是MyBatis中的N+1问题?如何解决?

N1 问题是指在进行一对多查询时,应用程序首先执行一条查询语句获取结果集(即 1),然后针对每一条结果,再执行 N 条额外的查询语句以获取关联数据。这个问题通常出现在 ORM 框架(如 MyBatis 或 Hibernate&…

给虚拟机linux系统安装交叉编译工具链

我们在电脑上写的代码编译生成的是X86架构的二进制文件,只能在X86平台上运行,而开发板是ARM架构因此需要安装交叉编译链工具,这样在电脑上写的代码交叉编译之后生成的是ARM架构的二进制文件。 绿色的字眼是与本文无关的只是这样有助于我们的…

python 实现entropy熵算法

entropy熵算法介绍 Entropy(熵)算法并不是一个单一的、具体的算法,而是一个广泛的概念,用于描述系统无序程度或信息不确定性的量度。在计算机科学、信息论、热力学等多个领域中,熵都有重要的应用。 在计算机科学中&a…

【Vue】- 生命周期和数据请求案例分析

文章目录 知识回顾前言源码分析1. 生命周期2. 请求数据案例分析 拓展知识 总结 知识回顾 前言 Vue生命周期 ● 就是一个Vue实例从创建 到 销毁 的整个过程。 生命周期四个阶段:① 创建 ② 挂载 ③ 更新 ④ 销毁 ● 创建阶段:创建响应式数据 ● 挂载阶段…

【七篇文章从零速通transformer】01 从零开始解密神经网络:深度学习基础全解析

文章简介 本系列文章旨在帮助零基础的读者系统地掌握深度学习,最终能够理解 Transformer 架构。本篇文章是第一篇,我们将从深度学习最核心的知识——神经网络——开始讲解,深入浅出地带你了解神经网络的结构、如何让神经网络工作,激活函数、损失函数、优化器和反向传播等关…

Router安装以及导入

安装 本文适合Vue3的项目使用 安装vue-router4 npm install vue-router4在src目录下创建router的文件夹,并新建一个index.js在index.js中导入vue-router,并定义其实例 import { createRouter, createWebHistory } from vue-router//在其中定义路由 c…

[网络]TCP/IP协议 之 TCP协议的核心机制(2)

文章目录 TCP核心机制1. 确认应答2. 超时重传3. 连接管理三次握手四次挥手 4. 滑动窗口5. 流量控制6. 拥塞控制7. 延时应答8. 捎带应答9. 粘包问题10. 异常情况 TCP核心机制 1. 确认应答 (上篇) 2. 超时重传 (上篇) 3. 连接管理 建立连接的流程: 三次握手 断开连接的流程…

3本SCI/SSCI期刊更名,9月WOS更新!速看!

SCI/SSCI期刊目录9月份已更新!快来查收最新动态!如有相关领域作者有意投稿,可作为重点关注! ​ 期刊动态 2024年9月科睿唯安期刊目录更新 2024年9月18日,科睿唯安更新了WOS期刊目录,此次更新&#xff0c…