mysq开启慢查询日志,对慢查询进行优化

1.创建实验的环境

创建对应的数据库,然后写脚本向数据库中写入400万条的数据


//创建实验用的数据库
CREATE DATABASE jsschool;//使用当前数据库
USE jsschool;//创建学生表
CREATE TABLE student (sno VARCHAR(20) PRIMARY KEY COMMENT '学生编号',sname VARCHAR(20) NOT NULL COMMENT '学生姓名',ssex VARCHAR(10) NOT NULL COMMENT '学生性别',sbirthday DATETIME COMMENT '学生生日', class VARCHAR(20) COMMENT '学生班级'
)ENGINE=InnoDB DEFAULT CHARSET=utf8;//创建教师表
CREATE TABLE teacher (tno VARCHAR(20) PRIMARY KEY COMMENT '教师编号',tname VARCHAR(20) NOT NULL COMMENT '教师姓名',tsex VARCHAR(10) NOT NULL COMMENT '教师性别',tbirthday DATETIME COMMENT '教师生日',prof VARCHAR(20) NOT NULL COMMENT '教师职称',depart VARCHAR(20) NOT NULL  COMMENT '教师院系'
)ENGINE=InnoDB DEFAULT CHARSET=utf8;//创建课程表
CREATE TABLE course (cno VARCHAR(20) PRIMARY KEY COMMENT '课程编号',cname VARCHAR(20) NOT NULL COMMENT '课程名称',tno VARCHAR(20) NOT NULL COMMENT '外键教师编号',FOREIGN KEY(tno) REFERENCES teacher(tno) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8;//创建分数表
CREATE TABLE score (sno VARCHAR(20) NOT NULL COMMENT '学生编号', cno VARCHAR(20) NOT NULL COMMENT '课程编号', degree DECIMAL COMMENT '成绩',FOREIGN KEY(sno) REFERENCES student(sno),	FOREIGN KEY(cno) REFERENCES course(cno)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

编写脚本向数据库中写入400万条数据,大概花费一晚上左右

import pymysqlif __name__ == '__main__':db = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='123456', db='jsschool')cursor = db.cursor()#sql = "SELECT * FROM `student` WHERE `class`=%s"#values = ("51",)sql = "INSERT INTO `student`(`sno`, `sname`, `ssex`, `sbirthday`, `class`) VALUES (%s, %s, %s,%s,%s)"no_num = 202class_num = 62for i in range(4000000):no_num += 1no = str(no_num)name = "李" + str(i)class_num += 1classvaule = str(class_num)values = (no, name, "男", "1995-06-25", classvaule)cursor.execute(sql, values)db.commit()print(i)db.close()

2.开启慢查询日志,记录执行慢的sql语句

执行语句,查询是否开启了慢查询

show variables like 'slow_query%';

ON 则表示已经开启了

打开配置文件,在你安装的mysql目录下面 MySQL\MySQL Server 8.0

表示是否开启慢查询 1表示开启

slow-query-log=1

存放慢查询的日志的目录

slow_query_log_file="DESKTOP-LQ2HAGP-slow.log"

慢查询的阈值,超过了多少实际需要记录

long_query_time=2

重启mysql服务

使用cmd 命令

net stop mysql
net start mysql

或者直接找到mysql服务,手动点击重启

笔者电脑里服务名是mysql80

输入查询语句进行测试

这里只是为了进行相应的测试,同样的如果你的项目代码和mysql数据库进行交互的时候,存在慢查询的语句,也会被保存下来

打开慢查询日志,查看是否记录

3.对慢查询语句进行优化

3.1使用索引对慢查询进行优化

给student表的class字段增加索引

alter table student add index indx_class (class);

没加索引之前,每次查询需要3s

加索引后,效果明显

3.2索引失效的情况

3.2.1查询的时候使用 or 可能导致索引失效

 select * from student where class = '9896' or sname = '李9836';

sname字段没有加索引,查询sname字段的时候还是会进行全表扫描

3.2.2使用like通配符导致的索引失效

select * from student where class like'%987';

select * from student where class like'987%';

通过对比可以发现,通配符放置到前面,会导致索引失效

3.2.3不满足索引的最左匹配原则

MySQl建立联合索引时,会遵循最左前缀匹配的原则,即最左优先。如果你建立一个(a,b,c)的联合索引,相当于建立了(a)、(a,b)、(a,b,c)三个索引。

如果此时a字段上没有增加索引,则会导致索引失效

建立起class 和 sname 的联合索引

alter table student add index indx_class_name (class,sname);

联合查询

select * from student where class = '9896' and sname = '李9833';
能看到索引是生效了

select * from student where sname = '李999841';
单独查询使用过滤条件,sname能看到索引已经失效了,

3.2.4索引字段上使用了 != 或者<> 的符号

select * from student where class != '9687'

这种情况下使用索引 和不适用索引,都是一样的慢的,索引要尽量避免使用不等于符号

4.对数据库结构进行优化,来针对慢查询

1.让表的结构尽量满足三大范式

2.如果是因为表的数据过多了可以考虑进行分库,分表

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

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

相关文章

加固平板电脑丨三防智能平板丨工业加固平板丨智能城市管理

随着智能城市的不断发展&#xff0c;人们对于城市管理的要求也在不断提高&#xff0c;这就需要高效、智能的城市管理平台来实现。而三防平板就是一款可以满足这一需求的智能设备。 三防平板是一种集防水、防尘、防摔于一体的智能平板电脑&#xff0c;它可以在复杂的环境下稳定运…

python介绍,安装Cpython解释器,IDE工具pycharm的使用

python介绍 官方的Python解释器本质是基于C语言开发的一个软件&#xff0c;该软件的功能就是读取以py.结尾的文件内容&#xff0c;然后按照Guido定义好的语法和规则去翻译并执行相应的代码。这种C实现的解释器被称为Cpython。 python解释器的种类&#xff1a;Jython IPyth…

记录下ibus-libpinyin输入法的重新安装

目前的版本为&#xff1a; 首先把现在的ibus-libpinyin卸了 sudo apt-get --purge remove ibus-libpinyin sudo apt-get autoremove 安装教程请参考 Installation libpinyin/ibus-libpinyin Wiki GitHub yilai sudo apt install pkg-config sudo apt-get install lib…

实战分享:SpringBoot在创新创业项目管理中的应用

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Unity3d Shader篇(三)— 片元半兰伯特着色器解析

文章目录 前言一、片元半兰伯特着色器是什么&#xff1f;1. 片元漫反射着色器的工作原理2. 片元半兰伯特着色器的优缺点优点&#xff1a;缺点&#xff1a; 3. 公式 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数…

QT设置qss

Qt设置qss文件&#xff08;设置在qrc中&#xff09; 1、右击项目选择添加新文件 2、在弹出的对话框中选择Qt -> Qt Resource File 3、随便起一个名称 4、在代码路径下新建一个stylesheet.qss文件&#xff0c;随便写入一些样式 5、右击resources.qrc&#xff0c;选择添加…

地理格网地址赋码过程

1.地址地名赋码流程 1.由镇街收集数据并且统一入库到地址数据库中; 2.进行地址字段的详细校验; 3.对进行校验通过的数据按照西湖区统一地址规则进行赋码 4.对进行校验失败的数据反馈成 execl 给镇街进行数据的核对校对 2地址校验规则 # 必填字段规范 省(字段名 - provinc…

进阶C语言-通讯录的实现

通讯录 🎈1.设计要求🎈2.程序实现🔭2.1打印菜单及初始化通讯录🔭2.2显示所有联系人🔭2.3查找指定的联系人🔭2.4删除指定的联系人🔭2.5查找指定的联系人🔭2.6修改指定联系人🔭2.7按照年龄排序(以此为例)🎈3.全部源码以及实现🎈1.设计要求 🌞通过前面…

SpringSecurity(17)——OAuth2令牌管理策略

刷新令牌策略 注意&#xff1a;刷新令牌只有在授权码模式和密码模式中才有&#xff0c;对应的指定这两种模式时&#xff0c;在类型上加上refresh_token <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-se…

【Flink入门修炼】1-1 为什么要学习 Flink?

流处理和批处理是什么&#xff1f; 什么是 Flink&#xff1f; 为什么要学习 Flink&#xff1f; Flink 有什么特点&#xff0c;能做什么&#xff1f; 本文将为你解答以上问题。 一、批处理和流处理 早些年&#xff0c;大数据处理还主要为批处理&#xff0c;一般按天或小时定时处…

如何在docker中访问电脑上的GPU?如何在docker中使用GPU进行模型训练或者加载调用?

如何在docker中访问电脑上的GPU&#xff1f;如何在docker中使用GPU进行模型训练或者加载调用&#xff1f; 其实使用非常简单&#xff0c;只是一行命令的事&#xff0c;最主要的事配置好驱动和权限。 docker run -it --rm --gpus all ycj520/centos:1.0.0 nvidia-smi先看看 st…

Kafka 使用手册

kafka3.0 文章目录 kafka3.01. 什么是kafka&#xff1f;2. kafka基础架构3. kafka集群搭建4. kafka命令行操作主题命令行【topic】生产者命令行【producer】消费者命令行【consumer】 5. kafka生产者生产者消息发送流程Producer 发送原理普通的异步发送带回调函数的异步发送同步…

Mac OS中创建适合网络备份的加密镜像文件:详细步骤与参数选择

这篇文章提供了在Mac OS中创建适合网络备份的加密镜像文件的详细步骤&#xff0c;同时探讨了在选择相关参数时的关键考虑因素&#xff0c;以确保用户能够安全、高效地存储和保护重要数据。 创建步骤 在Mac OS Monterey中&#xff0c;你可以使用“磁盘工具”&#xff08;Disk …

【C++】初始化列表--再谈构造函数

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

PXI-1 Peripheral Module 64Bit 改混合槽 PXI Express Hybrid Slot

PXI PXIEPXI_LBR05VauxPXI_LBR2WAKE#PXI_LBR3ALERT#PXI_LBR412VPXI_LBR512VPXI_LBRL0/PXI_STAR0GNDPXI_LBRL1/PXI_STAR1GNDPXI_LBRL2/PXI_STAR2GNDPXI_LBRL3/PXI_STAR33.3VPXI_LBRL4/PXI_STAR43.3VPXI_LBRL5/PXI_STAR53.3V 实际就是拆掉这个 红黄框里的端子。。

UE4 C++ 动态加载类和资源

动态加载类和资源&#xff1a;指在运行时加载 .cpp void AMyActor::BeginPlay() {Super::BeginPlay();//动态加载资源UStaticMesh* MyTempStaticMesh LoadObject<UStaticMesh>(nullptr,TEXT("/Script/Engine.StaticMesh/Game/StarterContent/Shapes/Shape_NarrowC…

Android9~Android13 某些容量SD卡被格式化为内部存储时容量显示错误问题的研究与解决方案

声明:原创文章,禁止转载! Android9~Android13 某些容量SD卡被格式化为内部存储时容量显示错误问题的研究与解决方案 分析Android11 系统对于EMMC/UFS作为内部存储、SD卡被格式化为内部存储、SD卡/U盘被格式化为便携式存储的不同处理 一.现象描述 实测Android9 Android10 A…

Aigtek高精度电压源什么作用

高精度电压源是一种能够提供稳定、可靠且精确的电压输出的电子设备。它在科学研究、工程应用和制造业中起着至关重要的作用。以下将详细介绍高精度电压源的作用及其在不同领域的应用。 一、工作原理 稳定性&#xff1a;高精度电压源通常采用精密的电路设计和稳压技术&#xff0…

Java开发IntelliJ IDEA2023

IntelliJ IDEA 2023是一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为Java开发人员设计。它提供了许多特色功能&#xff0c;帮助开发人员更高效地编写、测试和调试Java应用程序。以下是一些IntelliJ IDEA 2023的特色功能&#xff1a; 智能代码编辑器&…

电力负荷预测 | 基于TCN的电力负荷预测(Python)———数据预处理

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 基于TCN的电力负荷预测(Python) python3.8 keras2.6.0 matplotlib3.5.2 numpy1.19.4 pandas1.4.3 tensorflow==2.6.0