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

MySQL 大量 IN 的查询优化

背景

(1)MySQL 8.0 版本

(2)业务中遇到大量 IN 的查询,例:

SELECT id, username, icon 
FROM users 
WHERE id IN (123, 523, 1343, ...);

其中 id 为主键,IN 的列表长度有 8000 多个

问题

行数扫描 30W+,无法用到主键索引
造成 MySQL CPU 突升,其它的 SQL 堆积导致 HTTP 502 响应

原因

MySQL 的范围优化器在执行查询优化时,所需消耗的内存超出系统所配置的默认内存(range_optimizer_max_mem_size 8M),导致查询走次优的查询方式(全表扫描)

官方文档:

For individual queries that exceed the available range optimization memory and for which the optimizer falls back to less optimal plans, increasing the range_optimizer_max_mem_size value may improve performance.
https://dev.mysql.com/doc/refman/8.0/en/range-optimization.html

解决

适当增大 range_optimizer_max_mem_size 内存
(通过试验,将默认的 8M 提高至 24M 后,大量 IN 的查询不再导致 MySQL CPU 突升)

其它解决方法

使用临时表的方案

WITH t1(user_id) AS (VALUESROW(123),ROW(523),ROW(1343),ROW(66892).........,ROW(65815),ROW(357112)
)
SELECTid, username, icon
FROM t1 INNER JOIN users 
AS t ON t.id = t1.user_id

参考

  • https://blog.csdn.net/qq_37107851/article/details/122688567 Mysql(3)Range 优化
  • https://www.cnblogs.com/nanxiang/p/15133394.html MySQL数据库in 太多不走索引案例
  • https://dev.mysql.com/doc/refman/8.0/en/range-optimization.html 10.2.1.2 Range Optimization
http://www.lryc.cn/news/437267.html

相关文章:

  • python运维
  • gen_server补充基础学习
  • Python 入门教程(3)基础知识 | 3.1、基础语法
  • git 合并分支并解决冲突
  • 《程序猿之设计模式实战 · 装饰者模式》
  • [K8S]Forbidden: pod updates may not change fields other than
  • C/C++漏洞检测数据集汇总
  • springboot后端开发-常见注解及其用途
  • TypeScript 扩展
  • 按键学院往期视频
  • 通信工程学习:什么是MRF多媒体资源功能、MRFC多媒体资源功能控制、MRFP多媒体资源功能处理
  • 【Windows】获取进程缓解策略设置情况
  • 语音识别相关概念
  • Iceberg与SparkSQL查询操作整合
  • Linux 上安装 PostgreSQL
  • WRF-LES与PALM微尺度气象大涡模拟、PALM静态数据预备、PALM驱动数据预报、PALM模拟
  • 需求分析概述
  • Java | Leetcode Java题解之第391题完美矩形
  • java项目之基于web的人力资源管理系统的设计与实现(源码+文档)
  • Linux 防火墙:iptables (二)
  • 小目标检测顶会新思路!最新成果刷爆遥感SOTA,参数小了18倍
  • 【Ubuntu】虚拟机安装USB摄像头ROS驱动 usb_cam(最新方法)
  • 免费的成绩查询微信小程序,让家长轻松掌握学生表现
  • [含视频和源码]CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(三)
  • 如何把我另一个分支上的commit拿过来
  • 【rpg像素角色】俯视角-行走动画
  • Python时间序列分析新技能,轻松掌握时间索引
  • sklearn-逻辑回归-特征工程示例
  • RTMP播放器延迟最低可以做到多少?
  • 细致刨析JDBC ① 基础篇