记一次线上老系统Mysql慢查询优化

mysql进阶-查询优化-慢查询日志 日志对一个程序来说非常重要,他能帮助程序员在系统出现问题时快速定位问题,慢查询日志(`slow query log`)是MySQL自带的几种日志文件中非常重要的一种日志(另还有错误日志、查询日志、二进制日志)。 阅读详情

线上的老系统在高峰时期卡顿,有的时候甚至页面都打不开,通过监控发现是Mysql慢查询引起的,因此找到这些慢查询,来分别做优化。

1、第一条

mysql> SELECT COUNT(*) FROM `questions`  WHERE `questions`.`status` = 1 AND `questions`.`subject_id` = 0;
+----------+
| COUNT(*) |
+----------+
|   147586 |
+----------+
1 row in set (0.54 sec)

mysql> explain SELECT COUNT(*) FROM `questions`  WHERE `questions`.`status` = 1 AND `questions`.`subject_id` = 0;
+----+-------------+-----------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows   | Extra       |
+----+-------------+-----------+------+---------------+------+---------+------+--------+-------------+
|  1 | SIMPLE      | questions | ALL  | NULL          | NULL | NULL    | NULL | 177537 | Using where |
+----+-------------+-----------+------+---------------+------+---------+------+--------+-------------+
1 row in set (0.00 sec)

优化方法,添加联合索引:

alter table questions add index subject_id_status(subject_id,status);

优化结果,查询从0.54秒缩短到0.04秒:

mysql> explain SELECT COUNT(*) FROM `questions`  WHERE `questions`.`status` = 1 AND `questions`.`subject_id` = 0;
+----+-------------+-----------+------+-------------------+-------------------+---------+-------------+-------+-------------+
| id | select_type | table     | type | possible_keys     | key               | key_len | ref         | rows  | Extra       |
+----+-------------+-----------+------+-------------------+-------------------+---------+-------------+-------+-------------+
|  1 | SIMPLE      | questions | ref  | subject_id_status | subject_id_status | 6       | const,const | 88768 | Using index |
+----+-------------+-----------+------+-------------------+-------------------+---------+-------------+-------+-------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `questions`  WHERE `questions`.`status` = 1 AND `questions`.`subject_id` = 0;
+----------+
| COUNT(*) |
+----------+
|   147586 |
+----------+
1 row in set (0.04 sec)

2、第二条

mysql> SELECT COUNT(*) FROM `answer_votes`  WHERE `answer_votes`.`votable_id` = 53961 AND (up=0);
+----------+
| COUNT(*) |
+----------+
|        0 |
+----------+
1 row in set (0.03 sec)

mysql> explain SELECT COUNT(*) FROM `answer_votes`  WHERE `answer_votes`.`votable_id` = 53961 AND (up=0);
+----+-------------+--------------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table        | type | possible_keys | key  | key_len | ref  | rows  | Extra       |
+----+-------------+--------------+------+---------------+------+---------+------+-------+-------------+
|  1 | SIMPLE      | answer_votes | ALL  | NULL          | NULL | NULL    | NULL | 96390 | Using where |
+----+-------------+--------------+------+---------------+------+---------+------+-------+-------------+
1 row in set (0.00 sec)

优化方法,添加联合索引:

mysql> alter table answer_votes add index votable_id__up(votable_id,up);
Query OK, 0 rows affected (0.17 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> explain SELECT COUNT(*) FROM `answer_votes`  WHERE `answer_votes`.`votable_id` = 53961 AND (up=0);
+----+-------------+--------------+------+----------------+----------------+---------+-------------+------+-------------+
| id | select_type | table        | type | possible_keys  | key            | key_len | ref         | rows | Extra       |
+----+-------------+--------------+------+----------------+----------------+---------+-------------+------+-------------+
|  1 | SIMPLE      | answer_votes | ref  | votable_id__up | votable_id__up | 5       | const,const |    1 | Using index |
+----+-------------+--------------+------+----------------+----------------+---------+-------------+------+-------------+
1 row in set (0.00 sec)

3、第三条

mysql> SELECT `recommend_questions`.* FROM `recommend_questions` WHERE `recommend_questions`.`user_id` = 2309357 AND `recommend_questions`.`question_id` = 23156 LIMIT 1;
Empty set (0.20 sec)

mysql> EXPLAIN SELECT `recommend_questions`.* FROM `recommend_questions` WHERE `recommend_questions`.`user_id` = 2309357 AND `recommend_questions`.`question_id` = 23156 LIMIT 1;
+----+-------------+---------------------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table               | type | possible_keys | key  | key_len | ref  | rows   | Extra       |
+----+-------------+---------------------+------+---------------+------+---------+------+--------+-------------+
|  1 | SIMPLE      | recommend_questions | ALL  | NULL          | NULL | NULL    | NULL | 691335 | Using where |
+----+-------------+---------------------+------+---------------+------+---------+------+--------+-------------+
1 row in set (0.00 sec)

优化方法,添加联合索引:

mysql> alter table recommend_questions add index user_id_question_id(user_id,question_id);
Query OK, 0 rows affected (1.50 sec)
Records: 0  Duplicates: 0  Warnings: 0

优化结果,查询从0.2秒缩短到0.01秒:

mysql> EXPLAIN SELECT `recommend_questions`.* FROM `recommend_questions` WHERE `recommend_questions`.`user_id` = 2309357 AND `recommend_questions`.`question_id` = 23156 LIMIT 1;
+----+-------------+---------------------+------+---------------------+---------------------+---------+-------------+------+-------+
| id | select_type | table               | type | possible_keys       | key                 | key_len | ref         | rows | Extra |
+----+-------------+---------------------+------+---------------------+---------------------+---------+-------------+------+-------+
|  1 | SIMPLE      | recommend_questions | ref  | user_id_question_id | user_id_question_id | 8       | const,const |    1 | NULL  |
+----+-------------+---------------------+------+---------------------+---------------------+---------+-------------+------+-------+
1 row in set (0.00 sec)
MySQL慢查询优化实战:从检测到优化的全流程解析 MySQL慢查询日志是一种记录SQL执行时间超过阈值的日志文件。我们可以通过启用慢查询日志并配置合适的阈值来捕捉慢查询语句。在本节中,我们将介绍如何启用和配置慢查询日志,并解读慢查询日志的内容。-- 启用慢查询日志-- 解读慢查询日志在本节中,我们将分享一个实际案例,通过对慢查询的问题识别与分析,提出相应的解决方案,并展示优化后的结果。通过本篇博客的学习,我们对MySQL慢查询优化的全流程有了更深入的了解。在总结中,我们将回顾所学内容,并对未来持续优化的方向进行展望。 阅读详情

相关推荐

语音AI Agent落地实战:从ASR-NLP-TTS到多通道协同决策

语音AI Agent并非简单的自动语音识别(ASR)、自然语言处理(NLP)和文本转语音(TTS)三模块串联,而是在真实场景中需兼顾实时性、鲁棒性与隐私合规的端到端交互系统。其核心原理在于打破‘文本中间态’依赖,通过声学-文本-上下文多通道协同决策,融合原始音频特征、N-best置信度与设备环境信号,实现动态意图推演。技术价值体现在低延迟(如120ms离线唤醒)、高抗噪(-5dB SNR下WER≤25%)及强可控性(断网降级、本地热更新)。典型应用场景覆盖车载语音、智能家居与银行网点等边缘受限环境,尤其适用

weixin_29065959的博客 327

mysql fx0_记一次线上老系统Mysql慢查询优化

线上的老系统在高峰时期卡顿,有的时候甚至页面都打不开,通过监控发现是Mysql慢查询引起的,因此找到这些慢查询,来分别做优化。1、第一条mysql> SELECT COUNT(*) FROM `questions` WHERE `questions`.`status` = 1 AND `questions`.`subject_id` = 0;+----------+| COUNT(*) |...

weixin_36448205的博客 116

RISC-V V向量指令集学习笔记——访存指令

RISC-V V向量指令集学习笔记——访存指令

qq_41724469的博客 5135

数据库优化——慢查询MySQL定位优化流程

如何定位并优化慢查询SQL?如何使用慢查询日志?本文带来慢查询例子演示,新手都能看懂!那查询语句慢怎么办?explain带你分析sql执行计划!当主键索引、唯一索引、普通索引都存在,查询优化器如何选择?本文带你一探究竟!

卓越无关环境,保持空杯心态——靡不有初,鲜克有终 1万+

基于灰度信息的图像配准方法

图像配准方法分为三种:基于灰度信息方法、基于变换域方法和基于特征方法。基于灰度信息方法是直接根据图像或图像块灰度信息进行像素上的对齐,该方法主要思想是直接最小化图像信息差异。然而,图像信息差异的判断准则衍生出不同的配准方法。常见的基于灰度信息的图像配准方法包括互相关法、互信息法和误差平方和法。本节将分别对互相关法、互信息法和误差平方和算法展开介绍,并通过MATLAB进行演示。基于灰度的图像方法容易实现,但同样存在不足。该方法对成像条件(光照,遮挡)、图像形变旋转以及噪声极其敏感,同时具有较高的计算复杂度。

weixin_42068054的博客 3776

从空调温控到信号降噪:一阶RC低通滤波器在Arduino和STM32上的C语言实现指南

本文详细介绍了如何在Arduino和STM32平台上使用C语言实现一阶RC低通滤波器,涵盖从基础理论到实际应用的完整流程。通过具体代码示例和优化技巧,帮助开发者有效处理传感器噪声、信号平滑等问题,提升嵌入式系统的信号处理能力。

weixin_30565199的博客 501

Mysql慢查询日志的使用 和 Mysql的优化

一、生成实验数据 原理:sql 蠕虫复制(这种生成数据方式同样适用于数据表中有主键的情况)。 insert into comic (name,pen_name,cover) select name,pen_name,cover from comic   二、慢查询日志设置 当语句执行时间较长时,通过日志的方式进行记录,这种方式就是慢查询的日志。 1、临时开启慢查询日志(如果需要长时间...

迟迟 优快云 6万+

mac(apple silicon)arm64安装spm12详细教程

3.下载matlab runtime R2023b for macOS (macA64),注意必须下载这个,只下载matlab是不可以的。默认安装目录是/Applications/MATLAB/MATLAB_Runtime/R2023b。注意最后的命令,路径根据自己的matlab_runtime安装位置进行调整,然后就可以安装成功了。5. 解压spm12.zip,解压后将文件夹拖到应用程序下(Applications)2.下载spm12,这个版本可兼容mac芯片!6.打开mac终端,输入。

weixin_62332001的博客 2024

Mysql的慢查询常用优化方式

慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参...

Steven的博客 5243

【PX4学习笔记】1. ROS及PX4环境搭建

环境 Ubuntu18.04 安装教程参考 https://www.guyuehome.com/8983 安装过程中问题的解决 问题1 rosdep init 错误的终极解决方法 注意etc/下的ros和rostep文件夹要自己建 问题2 Ubuntu安装ROS报错 sudo: rosdep:找不到命令 问题3(更好地解决了问题1、2)【推荐】 解决GitHub的raw.githubusercontent.com无法连接问题 问题4:GeographicLib的安装 教程中安装GeographicLib d

【人工智障 | 计算鸡视觉 | 机器孩】 8233

AI智能体实战:从LangChain到多智能体协作的自动化新范式

在人工智能技术快速发展的今天,大语言模型(LLM)已成为推动自动化变革的核心驱动力。其原理在于通过深度学习海量文本数据,使模型能够理解、生成自然语言并执行推理任务。这一技术进步催生了AI智能体(AI Agent)这一新兴概念,它赋予自动化系统自主决策和动态规划能力,从而突破了传统脚本和RPA工具在固定流程上的局限。从技术价值看,AI智能体框架通过封装LLM调用、工具集成与流程编排,显著降低了构建复杂人机协同应用的开发门槛。在实际应用场景中,智能体尤其擅长处理信息调研、内容创作辅助、数据分析等需要处理非结构化

weixin_33730836的博客 773

MySQL慢查询及解决方案

MySQL慢查询与索引的关系,以及慢查询问题解决的方案

一群专业码农的笔记本 1万+

计算数列位置N的值

本文介绍了一个数列生成问题,要求根据输入的两个整数M和N生成特定规则的数列,并输出第N个位置上的数值。数列生成规则为:前M个元素为1到M;后续元素根据前M个元素是否重复来决定计算方式(求和或求差)。文章提供了C++、Java和Python三种语言的实现方案,均包含输入处理、数列初始化、循环计算和结果输出等步骤。各语言实现中均使用集合去重特性判断重复元素,并通过内置函数或自定义方法求取最大值和最小值。该问题主要考察基础编程能力,包括数组/列表操作、最值计算和重复元素判断等基本编程技巧。

面试高手的博客 655

MySQL之慢查询sql排查及优化

前言 sql语句优化的方式: 1.尽量少 join 2.尽量少排序 3.尽量避免 select * 4.尽量少 or 5.尽量用 union all 代替 union … (优化的方式有很多,这里就不一一举例了) 当你避免这些问题的时候,为什么sql查询还是这么慢? 排查慢查询sql ps:mysql版本为5.7 1.连接mysql mysql -uroot -p 2.查看数据库服务慢查询日志是否开启 show variables like ‘slow_query_log’; 3.开启慢查询

长得赛的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

2022年记一次慢查询优化指南,MySQL 优化学习第9天

有时候编写完的代码,上传到服务器,立马 CPU 与 负载跑满,查询原因之后,发现是 MySQL 慢查询导致,顾需要对慢查询进行调优。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mysql慢查询优化

定位低效 SQL 执行慢有两种情况: 偶尔慢:DB 在刷新脏页 redo log 写满了 内存不够用,要从 LRU 链表中淘汰 MySQL 认为系统空闲的时候 MySQL 关闭时 一直慢的原因:索引没有设计好、SQL 语句没写好、MySQL 选错了索引 ’mysql慢查询优化 第一步:开启mysql慢查询日志,通过慢查询日志定位到执行较慢的SQL语句。 第二步:利用explain关键字可以模拟优化器执行SQL查询语句,来分析SQL查询语句。 第三步:通过查询的结果进行优化。 优化方式 (1)首先分

weixin_45615504的博客 7662

MySQL慢查询优化

前言:在应用开发的早期,数据量少,程序猿开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时候这些有问题的SQL慢查询就是整个系统性能的瓶颈。 一、SQL慢查询简介 1.1、什么是SQL慢查询? 这里指的是MySQL慢查询,具体指运行时间超过long_query_time值的SQL。 我们常听常见的MySQL中有二进制日志binlog、中继日志relaylog、重做回滚日志redolog、undolog等。针对慢查询,还有一种慢查询日.

何哥的博客 2213

MySQL慢查询分析

在MySQL中,慢查询定义为执行时间超过特定阈值的查询。这个阈值可以通过MySQL的配置选项来设置。默认情况下,的值是10秒,意味着任何执行时间超过10秒的查询都会被认为是慢查询。然而,这个值可以根据具体需求进行调整,以便捕捉更多或更少的查询进行分析。MySQL提供了慢查询日志(Slow Query Log)功能,用于记录那些执行时间超过阈值的查询。通过分析慢查询日志,可以识别出数据库性能瓶颈,进而对SQL查询或数据库索引进行优化。要启用慢查询日志,需要在MySQL的配置文件(通常是my.cnf或。

m0_54187478的博客 3362

MySQL慢查询优化指南

当遇到慢查询问题时,不仅影响服务效率,还可能成为系统瓶颈。作为一位软件工程师,掌握MySQL慢查询优化技巧至关重要。今天,我们就来一场“数据库加速之旅”,用通俗易懂的方式,探讨如何优化MySQL中的慢查询。什么是慢查询?慢查询通常指的是在数据库执行过程中,响应时间超过预定阈值的SQL查询。这种查询由于各种原因(如复杂的查询逻辑、缺少索引、数据量大等)导致执行效率低下,从而影响系统性能和用户体验。发现慢查询监控工具:使用数据库自带的监控工具或第三方性能监控工具来跟踪查询性能。例如,MySQL中的。

2301_76419561的博客 1935

MySQL 慢查询优化指南

慢查询是指执行时间超过指定阈值的 SQL 查询。在 MySQL 中,可以通过设置参数来定义这个阈值,默认值为 10 秒。通过启用慢查询日志,我们可以记录这些执行时间过长的查询,以便进行分析和优化。通过启用和分析慢查询日志,我们可以有效地识别和解决 MySQL 慢查询问题。优化慢查询通常需要检查表结构、添加适当的索引、优化查询逻辑,以及必要时重新设计表结构。通过这些步骤,可以显著提高数据库性能,确保系统的高效运行。希望这篇博客能帮助你理解和优化 MySQL 慢查询。如果你有任何问题或建议,欢迎在评论区留言。

weixin_54574094的博客 1643

MySQL索引原理及慢查询优化

Mysql、数据库、索引、数据库优化、问题

Fong灵 1098

MySQL性能优化:深入分析慢查询的排查与解决

本文深入探讨MySQL慢查询问题的排查与优化过程,涵盖慢查询日志分析、执行计划优化、系统性能瓶颈排查及数据库配置调整,帮助提高查询效率并提升数据库性能。

专注分享编程开发与技术进阶干货! 3306

MySQL 之慢查询优化

识别和优化慢查询是提高 MySQL 数据库性能的重要任务。通过设置慢查询阈值、开启慢查询日志、分析慢查询日志、优化查询语句、数据库结构和索引等方法,可以有效地提高数据库的性能,减少慢查询的出现。在 MySQL 数据库的使用过程中,慢查询是一个常见的性能问题。慢查询会导致系统响应时间变长,影响用户体验,甚至可能导致系统崩溃。因此,识别和优化慢查询是提高 MySQL 数据库性能的重要任务。

candy的博客 1303

mysql慢查询优化_常见mysql的慢查询优化方式

一,第一步.开启mysql慢查询方式一:修改配置文件 在 my.ini 增加几行: 主要是慢查询的定义时间(超过2秒就是慢查询),以及慢查询log日志记录(slow_query_log)方法二:通过MySQL数据库开启慢查询:二,分析慢查询日志直接分析mysql慢查询日志 ,利用explain关键字可以模拟优化器执行SQL查询语句,来分析sql慢查询语句例如:执行EXPLAIN SELECT...

weixin_42451850的博客 6003
上一篇: Mysql中的锁
下一篇: Rails使用SQL语句查询
CSTO
博客等级 码龄17年 3粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值