多线程MySQL分页查询-性能优化

news2024/11/20 4:40:15

MySQL分页查询优化

  • 一、背景
  • 二、原因
  • 三、解决
  • 四、原理探究

https://blog.csdn.net/hollis_chuang/article/details/130570281

总结:
在这里插入图片描述

一、背景

  • 业务背景:给C端10万级别的用户,同时发送活动消息,活动消息分为6类。
  • 数据背景:mysql表有百万级别的数据量。
  • 问题:每次发活动消息时,数据库占用过高

在这里插入图片描述

二、原因

在这里插入图片描述
看sql日志记录,明显看出有两个问题:

  • 1 深分页
  • 2 查询条件执行了两次

explain下
在这里插入图片描述
type类型为 ref
在这里插入图片描述

三、解决

  • 原sql
select * from channel_subscribe_relation
where external_channel=9 
and template_id = "rf2624--esUKD3O5B1Qxfe15qbfAQugk-JpFVUf55BU"
and subscribe_status=1
order by id ASC
LIMIT 50000,10
  • 优化sql
SELECT * FROM channel_subscribe_relation
WHERE external_channel = 9 
  AND template_id = "dafdjlfanfdaln"
  AND subscribe_status = 1
  AND id > [Last_Page_Last_Id]
ORDER BY id ASC
LIMIT 10;

测试结果:

  • 原sql: 平均 0.1s级别

  • 优化sql:平均0.004 s

SELECT * FROM channel_subscribe_relation
WHERE external_channel = 9 
  AND template_id = "rNdk87qpBKQstZpx4hL0u1-kMCrF3phit-ySUOOt_8I"
  AND subscribe_status = 1
  AND id > 244567
ORDER BY id ASC
LIMIT 10;

在这里插入图片描述综上所述,使用主键id索引替换分页查询 ,查询性能:缩短了近 25 倍。

但是,问题并没有解决!因为代码是多线程去查库的,我并不知道上次上传的 最后一页的最后一个主键id是多少!

所以,只能另辟蹊径。

经过百度,还可以通过 通过子查询优化

  • 1 把条件转移到主键索引树
  • 2- NNER JOIN 延迟关联

SELECT *
FROM channel_subscribe_relation
WHERE id >= (
SELECT c.id
FROM channel_subscribe_relation c
WHERE c.external_channel = 9
AND c.template_id = “rf2624–esUKD3O5B1Qxfe15qbfAQugk-JpFVUf55BU”
AND c.subscribe_status = 1
ORDER BY c.id ASC
LIMIT 50000, 1
)
AND external_channel = 9
AND template_id = “rf2624–esUKD3O5B1Qxfe15qbfAQugk-JpFVUf55BU”
AND subscribe_status = 1
ORDER BY id ASC
limit 10

0.05s

进一步优化:

SELECT * FROM channel_subscribe_relation
WHERE id IN (
SELECT id
FROM (
SELECT c.id
FROM channel_subscribe_relation c
WHERE c.external_channel = 9
AND c.template_id = “rf2624–esUKD3O5B1Qxfe15qbfAQugk-JpFVUf55BU”
AND c.subscribe_status = 1
ORDER BY c.id ASC
LIMIT 50000, 10
) AS t
);

四、原理探究

TODO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/927638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《华为认证》6to4自动隧道

实验需求: 在NE1和NE3之间使用tunnel 口创建6to4自动隧道,实现PC1和PC2互访。 步骤1:配置ipv4地址,如图所示: 步骤2:配置NE1和NE3的ipv4路由,是两端的ipv4网络能够互访 R1: ip route-static 0.0.0.0 0…

msvcp120.dll文件缺失一键修复方法,靠谱的多种修复msvcp120.dll方案

msvcp120.dll文件的丢失,其实是比较常见的,msvcp120.dll是一个Microsoft Visual C Redistributable的关键文件,它包含了一些用于C编程的标准函数和类的定义。如果msvcp120.dll丢失了,那么你的一些与这个文件相关的程序是打不开的&…

小程序订阅消息

注意:小程序订阅消息和小程序类目挂钩,只有设置对应的类目后才能发送相应的公共模板小程序订阅消息 1、类目 1/1 获取微信所有类目信息 https://api.weixin.qq.com/cgi-bin/wxopen/getallcategories?access_token1/2 获取当前账号配置的类目 https:…

Vue学习之Vue组件的核心概念

组件是什么 vue组件就是一个个独立的小型的ui模块,整个大型的系统就是由一个个小型的UI模块拼接而成的 vue组件就是vue实例,通过new Vue函数来创建的一个vue实例,不同的组件只不过是options的不同,我们基本百分之90的开发工作都…

LeetCode 1448. 统计二叉树中好节点的数目:DFS

【LetMeFly】1448.统计二叉树中好节点的数目 力扣题目链接:https://leetcode.cn/problems/count-good-nodes-in-binary-tree/ 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点…

4 多层感知机

多层感知机是一组前向结构的人工神经网络,映射一组输入向量到一组输出向量。除了输入节点,每一个节点都是一个带有非线性激活函数的神经元。多层感知机在输入层和输出层之间添加了一个或者多个隐藏层,并通过激活函数转换隐藏层输出。以下介绍…

Unity 应用消息中心-MessageCenter

Ps:主要解决耦合问题,把脚本之间的联系通过不同消息类型事件形式进行贯通 1.MessageCenter主脚本 2.DelegateEvent消息类型脚本 3.MC_Default_Data具体接收类脚本 using System; using System.Collections; using System.Collections.Generic; using …

C语言弯道超车必做好题锦集(编程题)

目录 前言: 1.计算日期到天数转换 2.尼科彻斯定理 3.密码检查 4.图片整理 5.寻找数组的中心下标 6.字符个数统计 7.多数元素 前言: 编程想要学的好,刷题少不了,我们不仅要多刷题,还要刷好题!为此我…

压力检测器的基本信息是什么

压力检测器利用了传感器技术、电路处理技术、无线传输技术,能够精准测量气体或者液体等介质的压力,并将测得的数据上传至监控平台。 压力检测器能够适用于供水厂、污水处理厂、消防水系统、输油管道、输气管道等相关场景,拥有自动补偿功能、…

你知道开发程序的流程化、模块化、规范化是怎样的?不同厂商一样吗?

Postive: 我在天津的公司 都是netframwork的 .......... 后来 去北京 就找core 的技术 确实感觉不是一个层次的 .......... Postive: 以前 在天津 就是堆业务 部署iis 点点就完事了 用个redis 就牛逼的不行了 干上core的项目才发现 授权是单独…

[C++] STL_vector使用与常用接口的模拟实现

文章目录 1、vector的介绍2、vector的使用2.1 vector的定义2.2 vector迭代器的使用2.3 vector的空间增长问题 3、vector的增删查改3.1 push_back(重点)3.2 pop_back(重点)3.3 operator[](重点)3.4 insert3.…

腾讯云下一代CDN -- EdgeOne加速MinIO对象存储

省流 使用MinIO作为EdgeOne的源站。 背景介绍 项目中需要一个兼容S3协议的对象存储服务,腾讯云的COS虽然也兼容S3协议,但是也只是支持简单的上传下载,对于上传的时候同时打标签这种需求,就不兼容S3了。所以决定自建一个对象存储…

基于Java+SpringBoot+vue前后端分离在线问卷调查系统设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

VR云游同美景邂逅,抓住暑假的小尾巴~

暑期余额不足的宝子们,是不是还没出门玩耍玩个够呢?不如趁这个时候,用VR云游抓住暑假的小尾巴,收获一波开学前的“收心之旅”吧! VR云游相较于传统旅游来说,是通过个性化云服务,为智能景区建立综…

【WSN无线传感器网络恶意节点】使用 MATLAB 进行无线传感器网络部署研究

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

线性代数的学习和整理8:行列式相关

目录 1 从2元一次方程组求解说起 1.1 直接用方程组消元法求解 1.2 有没有其他方法呢?有:比如2阶行列式方法 1.3 3阶行列式 2 行列式的定义 2.1 矩阵里的方阵 2.2 行列式定义:返回值为标量的一个函数 2.3 行列式的计算公式 2.4 克拉…

189. 轮转数组

189. 轮转数组 class Solution { public:void rotate(vector<int>& nums, int k) {int n nums.size();k k % n;reverse(nums.begin(),nums.end());reverse(nums.begin(),nums.begin()k);reverse(nums.begin()k,nums.end());} };

2023年高教社杯数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…

最新活动报名表单系统源码 支持表单自定义+在线支付报名

分享一款最新活动报名表单系统源码&#xff0c;支持任意行业各种活动在线支付报名&#xff0c;配合万能自定义表单&#xff0c;适用于各种活动报名、课程招生、会议报名统计等等。 功能特点一览&#xff1a; 表单自定义&#xff1a;该报名系统允许组织者根据活动的需求自定义报…

Mybatis与Spring整合以及Aop整合pagehelper插件

一. Mybatis与Spring的集成 将MyBatis与Spring进行整合&#xff0c;主要解决的问题就是将SqlSessionFactory对象交由Spring容器来管理&#xff0c;所以&#xff0c;该整合&#xff0c;只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在Spring容器中&#xff…