show [session|global] status : 查看服务器状态

show global status like 'Com_' : 查看各种语句的执行次数

开启慢查询: 在 MySQL 配置文件(/etc/my.cnf)配置:

#开启MySQL慢日志查询开关 
slow_query_log=1 
#设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志 
long_query_time=2

查看 SQL 的执行耗时:

#查看每一条SQL的耗时基本情况 
show profiles; #查看指定query_id的SQL语句各个阶段的耗时情况 
show profile for query query_id; #查看指定query_id的SQL语句CPU的使用情况 
show profile cpu for query query_id;
EXPLAIN 语句

EXPLAIN: 获取如何执行 SELECT 语句的信息

#直接在select语句之前加上关键字 
explain / desc EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件 ;

EXPLAIN 执行计划各字段含义:

  • Id:查询的序列号,表示查询中执行 select 子句或者操作表的顺序 ( id 相同,执行顺序从上到下;id 不同,值越大,越先执行)

  • select_type:表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNIONUNION 中的第二个或者后面的查询语句)、SUBQUERYSELECT/WHERE 之后包含了子查询)等

  • type:表示连接类型,性能由好到差的连接类型为 NULL、system、const、eq_ref、ref、range、index、all

  • possible_key:显示可能应用在这张表上的索引,一个或多个

  • Key:实际使用的索引,如果为 NULL 则没有使用索引

  • Key_len:表示索引中使用的字节数,该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下,长度越短越好

  • rows:MySQL 认为必须要执行查询的行数,在 innodb 引擎的表中,是一个估计值,可能并不总是准确的

  • filtered:表示返回结果的行数占需读取行数的百分比,filtered 的值越大越好

索引使用规则

最左前缀法制:
指的是查询从索引的最左列开始,不跳过索引中的列,如果跳跃某一列,后面的字段索引会失效

和查询时放的列顺序无关,存在即可,比如:

WHERE b = 2 AND a = 1用到 a, b数据库会优化条件顺序(a 在前),不影响

![[Pasted image 20250719180708.png]]

尽量使用 >= 而不是 >, 这样索引就不会失效

插入数据优化
  • 插入数据时选择批量插入:
Insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry');

数据量大时可以选择 load 指令:

#客户端连接服务端时,加上参数 --local-infile
mysql --local-infile -u root -p#设置全局参数local_infile为1,开启从本地加载文件导入数据的开关
set global local_infile = 1;#执行load指令将准备好的数据,加载到表结构中
load data local infile '/root/sql1.log' into table `tb_user` fields terminated by ',' lines terminated by '\n';
  • 手动提交事务:
start transaction;
insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry');
insert into tb_test values(4,'Tom'),(5,'Cat'),(6,'Jerry');
insert into tb_test values(7,'Tom'),(8,'Cat'),(9,'Jerry');
commit;

主键设计原则:

  • 满足业务的情况下尽量降低 主键长度
  • 插入数据时,尽量选择顺序插入,不要乱序, 性能更好, 选择使用 AUTO_INCREMENT 自增主键
  • 尽量不要使用 UUID 做主键或者是其他自然主键,如身份证号
  • 业务操作时,不要对主键修改
order by 优化
  • Using filesort:通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区 sort buffer 中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫 FileSort 排序

  • Using index:通过有序索引顺序扫描直接返回有序数据,这种情况即为 using index,不需要额外排序,操作效率高

  • 根据排序字段建立合适的索引,多字段排序时,也遵循最左前缀法则

  • 尽量使用覆盖索引

  • 多字段排序,一个升序一个降序,此时需要注意联合索引在创建时的规则(ASC/DESC

  • 如果不可避免的出现 filesort,大数据量排序时,可以适当增大排序缓冲区大小 sort_buffer_size (默认 256k)

group by优化

分组操作时,索引的使用要满足最左前缀法制,这样的效率比较高

limit优化

通过覆盖索引加子查询形式进行优化

explain select * from tb_sku t , (select id from tb_sku order by id limit 2000000,10) a where t.id = a.id;
count优化
  • count () 对于返回的结果集,一行行地判断,如果参数不是 NULL,值加 1,否则不加,最后返回值
  • 用法: count (*)、count (主键)、count (字段)、count (1)

效率 : count (字段) < count (主键) < count (1) ≈ count (*), 尽量使用 count(*)

update优化

执行更新时,更新的条件一定要有索引,而且这个索引不能失效,不然会从行锁升级为表锁,并发性能会降低

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow pwn40

目录 1. 分析程序 2. 漏洞编写 3. 漏洞验证 1. 分析程序 首先检查程序相关保护&#xff0c;发现程序为32位且只开启了一个NX保护 checksec pwn 使用IDA进行逆向分析代码&#xff0c;查看漏洞触发点&#xff1a; 在main函数中&#xff0c;有一个ctfshow函数&#xff0c;这里…

SQL173 店铺901国庆期间的7日动销率和滞销率

SQL173 店铺901国庆期间的7日动销率和滞销率 SQL题解&#xff1a;店铺动销率与滞销率计算 关键&#xff1a;只要当天任一店铺有任何商品的销量就输出该天的结果&#xff0c;即使店铺901当天的动销率为0。 潜台词&#xff1a;​输出逻辑与店铺901的销售情况无关&#xff0c;只取…

PytorchLightning最佳实践基础篇

PyTorch Lightning&#xff08;简称 PL&#xff09;是一个建立在 PyTorch 之上的高层框架&#xff0c;核心目标是剥离工程代码与研究逻辑&#xff0c;让研究者专注于模型设计和实验思路&#xff0c;而非训练循环、分布式配置、日志管理等重复性工程工作。本文从基础到进阶&…

Apache Flink 实时流处理性能优化实践指南

Apache Flink 实时流处理性能优化实践指南 随着大数据和实时计算需求不断增长&#xff0c;Apache Flink 已经成为主流的流处理引擎。然而&#xff0c;在生产环境中&#xff0c;高并发、大吞吐量和低延迟的业务场景对 Flink 作业的性能提出了更高要求。本文将从原理层面深入解析…

ubuntu上将TempMonitor加入开机自动运行的方法

1.新建一个TempMonitor.sh文件&#xff0c;内容如下&#xff1a;#!/bin/bashcd /fjrobot/ ./TempMonitor &2.执行以下命令chmod x TempMonitor chmod x TempMonitor.sh rm -rf /etc/rc2.d/S56TempMonitor rm -rf /etc/init.d/TempMonitor cp /fjrobot/TempMonitor.sh /etc/…

速卖通自养号测评技术解析:IP、浏览器与风控规避的实战方案

一、速卖通的“春天”来了&#xff0c;卖家如何抓住机会&#xff1f;2025年的夏天&#xff0c;速卖通的风头正劲。从沙特市场跃升为第二大电商平台&#xff0c;到8月大促返佣力度升级&#xff0c;平台对优质商家的扶持政策越来越清晰。但与此同时&#xff0c;竞争也愈发激烈——…

adb: CreateProcessW failed: 系统找不到指定的文件

具体错误 adb devices * daemon not running; starting now at tcp:5037 adb: CreateProcessW failed: 系统找不到指定的文件。 (2) * failed to start daemon adb.exe: failed to check server version: cannot connect to daemon 下载最新的platform-tools-windows 下载最新…

Centos安装HAProxy搭建Mysql高可用集群负载均衡

接上文MYSQL高可用集群搭建–docker https://blog.csdn.net/weixin_43914685/article/details/149647589?spm1001.2014.3001.5501 连接到你搭建的 Percona XtraDB Cluster (PXC) 数据库集群&#xff0c;实现高可用性和负载均衡&#xff0c;建议使用一个中间件来管理这些连接。…

Sql server开挂的OPENJSON

以前一直用sql server2008&#xff0c;自从升级成sql server2019后&#xff0c;用OPENJSON的感觉像开挂&#xff0c;想想以前表作为参数传输时的痛苦&#xff0c;不堪回首。一》不堪回首 为了执行效率&#xff0c;很多时候希望将表作为参数传给数据库的存储过程。存储过程支持自…

【数据结构】队列和栈练习

1.用队列实现栈 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; typedef int QDatatype; typedef struct QueueNode {struct QueueNode *next;QDatatype data; }QNode;typedef struct Queue {QNode* head;QNode* tail;QDatatype size; }Que;typedef struct {Que…

LabVIEW二维码实时识别

​LabVIEW通过机器视觉技术&#xff0c;集成适配硬件构建二维码实时识别系统。通过图像采集、预处理、定位及识别全流程自动化&#xff0c;解决复杂环境下二维码识别效率低、准确率不足问题&#xff0c;满足工业产线追溯、物流分拣等实时识别需求。应用场景适用于工业产线追溯&…

微服务-springcloud-springboot-Skywalking详解(下载安装)

一、SkyWalking核心介绍 1. 什么是SkyWalking&#xff1f; Apache SkyWalking是一款国人主导开发的开源APM&#xff08;应用性能管理&#xff09;系统&#xff0c;2015年由吴晟创建&#xff0c;2017年进入Apache孵化器&#xff0c;2019年毕业成为Apache顶级项目。它通过分布式…

Elasticsearch 字段值过长导致索引报错问题排查与解决经验总结

在最近使用 Elasticsearch 的过程中&#xff0c;我遇到了一个 字段值过长导致索引失败 的问题。经过排查和多次尝试&#xff0c;最终通过设置字段 "index": false 方式解决。本文将从问题现象、排查过程、问题分析、解决方案和建议等方面&#xff0c;详细记录这次踩坑…

使用idea 将一个git分支的部分记录合并到git另一个分支

场景&#xff1a; 有多个版本分支&#xff0c;需要将其中一个分支的某一两次提交合并到指定分支上 eg&#xff1a; 将v1.0.0分支中指定提交记录 合并到 v1.0.1分支中 操作&#xff1a; 步骤一 idea切换项目分支到v1.0.1(需要合并到哪个分支就先站到哪个分支上) 步骤二 在ide…

基于深度学习的图像分类:使用ShuffleNet实现高效分类

前言 图像分类是计算机视觉领域中的一个基础任务&#xff0c;其目标是将输入的图像分配到预定义的类别中。近年来&#xff0c;深度学习技术&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;在图像分类任务中取得了显著的进展。ShuffleNet是一种轻量级的…

OpenGL里相机的运动控制

相机的核心构造一个是glm::lookAt函数&#xff0c;一个是glm::perspective函数&#xff0c;本文相机的一切运动都在于如何构建相应的参数传入上述两个函数里。glm::mat4 glm::lookAt(glm::vec3 const &eye,//相机所在位置glm::vec3 const &center,//要凝视的点glm::vec…

java设计模式 -【策略模式】

策略模式定义 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;允许在运行时选择算法的行为。它将算法封装成独立的类&#xff0c;使得它们可以相互替换&#xff0c;而不影响客户端代码。 核心组成 Context&#xff08;上下文&#xff09;&…

项目重新发布更新缓存问题,Nginx清除缓存更新网页

server {listen 80;server_name your.domain.com; # 替换为你的域名root /usr/share/nginx/html; # 替换为你的项目根目录# 规则1&#xff1a;HTML 文件 - 永不缓存# 这是最关键的一步&#xff0c;确保浏览器总是获取最新的入口文件。location /index.html {add_header Cache-…

系统架构师:系统安全与分析-思维导图

系统安全与分析的定义​​系统安全与分析是系统架构师在系统全生命周期中贯穿的核心职责&#xff0c;其本质是通过​​识别、评估、防控安全风险&#xff0c;并基于数据与威胁情报进行动态分析​​&#xff0c;构建从技术到管理的多层次防护体系&#xff0c;确保系统的保密性&a…

利用 Google Guava 的令牌桶限流实现数据处理限流控制

目录 一、令牌桶限流机制原理 二、场景设计与目标 三、核心实现代码&#xff08;Java&#xff09; 1. 完整代码实现 四、运行效果分析 五、应用建议 在高吞吐数据处理场景中&#xff0c;如何限制数据处理速率、保护系统资源、防止下游服务过载是系统设计中重要的环节。本文…