Mysql 中 not in 的查询优化
本文为博主原创,转载请注明出处:
最近做性能优化时,通过开启 MySQL 的慢日志查询配置,发现 有一条慢sql,在这里记录下分析和优化的过程。
该慢 sql 如下:
select id from fucdn_customer_domain where id not in (
select customer_domain_id from fucdn_customer_domain_cache where cache_time > 0
) and status = 1
通过 explain 或 desc 查看该sql 的执行计划:

可以看出这条sql 的执行计划分为两步。第一步先执行 fucdn_customer_domain_cache 这张表的子查询,这张表查询结束后再进行外层的查询,且访问类型均为 ALL,所以导致该sql 执行耗时较长。
使用 left join 进行关联优化,将sql 中的子查询,优化为左连接,即减少 sql 执行嵌套的层数,优化后的sql 如下:
select id from fucdn_customer_domain fcd LEFT JOIN (
select customer_domain_id from fucdn_customer_domain_cache where cache_time > 0
) t on fcd.id = t.customer_domain_id where fcd.status = 1 and t.customer_domain_id is null
查看优化后的sql 执行计划:

优化后 id 都变为了1,且过滤的数量比not in 时少了很多。由于本地数据库数据量比较少, 优化后效果并不明显,当拿到 压测环境或现网环境时,性能提高了至少一半以上。
Mysql 中 not in 的查询优化的更多相关文章
- mysql中min和max查询优化
mysql max() 函数的需扫描where条件过滤后的所有行: 在测试环境中重现: 测试版本:Server version: 5.1.58-log MySQL Community ...
- 【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)
原文地址:http://blog.csdn.net/zwan0518/article/details/11972853 目录(?)[-] 一查询优化 1创建索引 2缓存的配置 3slow_query_ ...
- mysql中的sql查询优化
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进 ...
- MySQL中的两种临时表
MySQL中的两种临时表 伯乐在线2016-07-06 05:16:52阅读(4556)评论(3) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 ...
- MySQL 中NULL和空值的区别 (转载 http://blog.sina.com.cn/s/blog_3f2a82610102v4dn.html)
平时我们在使用MySQL的时候,对于MySQL中的NULL值和空值区别不能很好的理解.注意到NULL值是未知的,且占用空间,不走索引,DBA建议建表的时候最好设置字段是NOT NULL 来避免这种低效 ...
- mysql中key 、primary key 、unique key 与index区别
一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id ) NOT NULL auto_increment, ) default NU ...
- MySQL 中的两种临时表
来源:阿里云RDS - 数据库内核组 链接:http://mysql.taobao.org/monthly/2016/06/07/ 外部临时表 通过CREATE TEMPORARY TABLE 创建的 ...
- MySQL中的联合索引学习教程
MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到 ...
- MySQL查询执行的基础——查询优化处理
查询的生命周期的下一步是将一个SQL转换成一个可执行计划,MySQL再按照这个计划和存储引擎进行交互 语法解析器和预处理 首先,MySQL通过关键词将SQL语句进行解析,并生成一颗对应的"解 ...
- mysql基本知识点梳理和查询优化
目录 一.索引相关 二.EXPLIAN中有用的信息 三.字段类型和编码 四.SQL语句总结 五.踩坑 六.千万大表在线修改 七.慢查询日志 八.查看sql进程和杀死进程 九.一些数据库性能的思考 本文 ...
随机推荐
- Python 提取 Word 文档中的文本和图片
将内容从 Word 文档中提取出来可以方便我们对其进行其他操作,如将内容储存在数据库中.将内容导入到其他程序中.用于 AI 训练以及制作其他文档等.第三方库 Spire.Doc for Python ...
- Spingboot整合Dubbo+zookeeper
前言: 2023-12-26 19:38:05 最近学习分布式技术:Dubbo+zookeeper,准备写一个demo用springboot整合dubbo和zookeeper.但是看了网上一些教程都是 ...
- 若依集成knife4j实现swagger文档增强
若依集成knife4j实现swagger文档增强 本期全是干货,这里我就当你用的非常熟练了,在ruoyi-admin模块中pom文件里加入以下依赖 注:引用knife4j-spring-boot-st ...
- 从零玩转设计模式之原型模式-yuanxingmoshi
title: 从零玩转设计模式之原型模式 date: 2022-12-11 20:05:35.488 updated: 2022-12-23 15:35:44.159 url: https://www ...
- Redis 使用的 10 个小技巧
Redis 在当前的技术社区里是非常热门的.从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redis已经走过了很长的一段路. 随之而来的一系列最佳实践,使得大多数人可以正确地 ...
- javacv图片美颜处理,视频美颜处理
javacv图片美颜处理,视频美颜处理 国产剧明星演戏自带十级滤镜,是众所周知的秘密: 使用opencv也能实现一定的美颜效果: 一.图片美颜 代码 package top.lingkang.test ...
- proxy代理实现接口调用处理
proxy代理实现接口调用处理 我们知道,要调用接口必须要实例化才能调用. 那么我们能不能不实例化调用呢?像mybatis.hibernate那样定义一个接口就能注入调用.其实他们的底层实现就是用代理 ...
- 2023-11-29:用go语言,给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。 需保证 返回结果的字典序最小。 要求不能打乱其他字符的相对位置)。 输入:s = “cba
2023-11-29:用go语言,给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次. 需保证 返回结果的字典序最小. 要求不能打乱其他字符的相对位置). 输入:s = &quo ...
- 文心一言 VS 讯飞星火 VS chatgpt (63)-- 算法导论6.5 2题
文心一言 VS 讯飞星火 VS chatgpt (63)-- 算法导论6.5 2题 二.试说明 MAX-HEAP-INSERT(A,10)在堆A=(15,13,9,5,12,8,7,4,0,6,2,1 ...
- 基于Fabric的性能测试与调优实践
摘要:本文聚焦Fabric核心业务,构建一个测试模型,对社区原生的Fabric和华为云区块链(基于Fabric)进行实测,识别社区原生Fabric的性能瓶颈,并尝试通过华为区块链提供的动态伸缩.快速P ...