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

news2024/11/25 16:57:16

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 pymysql


if __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 = 202
    class_num = 62
    for i in range(4000000):
        no_num += 1
        no = str(no_num)
        name = "李" + str(i)
        class_num += 1
        classvaule = 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.coloradmin.cn/o/1444609.html

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

相关文章

《21天精通IPv4 to IPv6》第0天:IPv4至IPv6的必要性与互联网IP资源发展趋势浅谈

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【linux系统体验】-archlinux简易折腾

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化2.4 桌面面板美化 三、常用命令 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤&#xff1a; 磁盘分区安装 Linux内核配置系统&#xff08;…

JCIM | MD揭示PTP1B磷酸酶激活RtcB连接酶的机制

Background 内质网应激反应&#xff08;UPR&#xff09; 中的一个重要过程。UPR是由内质网中的三种跨膜传感器&#xff08;IRE1、PERK和ATF6&#xff09;控制的细胞应激反应&#xff0c;当内质网中的蛋白质折叠能力受到压力时&#xff0c;UPR通过减少蛋白质合成和增加未折叠或错…

vscode远程连接失败

目录 解决方案尝试1解决方案尝试2 解决方案尝试1 最近通过vscode一直使用腾讯云的服务器作为远程开发环境&#xff0c;以前一直很好用。 直到最近重装了系统之后&#xff0c;发现vscode没法对云服务器进行连接了&#xff0c;即使在远程主机添加了本地的公钥也不行。直接报错:…

vb.net极简版扫雷16*16,40雷源代码,仅供学习和参考

效果图&#xff1a;下载地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/14rrZujpQbfs-9HMw_lL-3Q?pwd1234 提取码&#xff1a;1234 源代码&#xff1a;只有120行 Imports System.Math Public Class Form1Dim Booms As New List(Of Point)Dim MyBooms As New List…

推荐系统|物品冷启动01_优化目标评价(包括基尼系数)

文章目录 物品冷启动冷启动的类型“新”按常规推送链路的角度按产品生态角度 物品冷启动的目标和评价指标作者侧用户侧 冷启动的衡量 物品冷启动 冷启动的类型 冷启动的内容种类包括很多方面&#xff0c;本文只介绍UGC的冷启动。 所谓UGC&#xff0c;就是User Generate Conte…

leetcode(二分查找)35.搜索插入位置(C++详细解释)DAY6

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。…

利用YOLOv8 pose estimation 进行 人的 头部等马赛克

文章大纲 马赛克几种OpenCV 实现马赛克的方法高斯模糊pose estimation 定位并模糊:三角形的外接圆与膨胀系数实现实现代码实现效果参考文献与学习路径之前写过一个文章记录,怎么对人进行目标检测后打码,但是人脸识别有个问题是,很多人的背影,或者侧面无法识别出来人脸,那…

python从入门到精通(十):python常见标准库的使用

python数据分析和可视化基础 &#xff08;一&#xff09;Python 中处理日期和时间的模块time导入time模块time获取当前时间戳localtime获取当前时间struct_timeasctime获取格式化的时间ctime获取格式化的时间gmtime获取格式化的时间计时器功能strftime格式化日期strptime格式化…

顶级思维方式——认知篇三(财富与金钱)

目录 1、 什么是财富/财富的定义&#xff1f; 2、财富的影响 3、 财富意味着什么&#xff1f; 4、财富与幸福的关系 5、物质财富如何使用才有实际意义&#xff1f; 6、金钱的运作方式 7、【物质财富自由】后的选择 1、 什么是财富/财富的定义&#xff1f; 财富是一个多维…

MOMENTUM: 1

攻击机 192.168.223.128 目标机 192.168.223.146 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.146 开启了22 80端口 看一下web界面 随便打开看看 发现这里有个参数id&#xff0c;sql尝试无果&#xff0c;发现写入什么&#xff0c;网页显示…

2014-2022上市公司纳税信用评级、企业税务评级数据

2014-2022上市公司纳税信用评级、企业税务评级数据 1、时间&#xff1a;2014-2022年 2、来源&#xff1a;上市公司信用BG 3、指标&#xff1a;code&#xff0c;year&#xff0c;证券代码&#xff0c;纳税人名称。统一社会信用代码&#xff0c;纳税信用评级 4、样本量&#…

整合RabbitMQ实现消息异步发送

消息队列中间件 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削峰等问题。 中间件最标准的用法是生产者生产消息传送到队列&#xff0c;消费者从队列中拿取消息并处理&#xff0c;生产者不用关心是谁来消费&#…

《21天精通IPv4 to IPv6》第5天:IPv4与IPv6共存策略——如何为不同的系统实现IPv4与IPv6共存问题?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

华为OD机试 - 分配土地( Python C C++ JavaGo JS PHP)

题目描述 从前有个村庄&#xff0c;村民们在各种田地上插上小旗子&#xff0c;每个旗子上都标识了一个数字。现在&#xff0c;村民们想要找出一个包含相同数字的最小矩形区域&#xff0c;并将这块土地分配给对村庄做出巨大贡献的村民。我们需要找出这个矩形区域的最大面积。 …

SPI NOR FLASH和SPI NAND FLASH

SPI NOR FLASH和SPI NAND FLASH是两种不同的存储设备&#xff0c;它们在硬件接口和软件应用上都有所不同。以下是关于这两种存储设备更详细的介绍&#xff1a; 1.SPI NOR FLASH SPI NOR FLASH是一种非易失性存储器&#xff0c;它通过串行接口进行数据传输&#xff0c;具有读写…

C#使用哈希表对XML文件进行查询

目录 一、使用的方法 1.Hashtable哈希表 2.Hashtable哈希表的Add方法 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;示例 3.XML文件的使用 二、实例 1.源码 2.生成效果 可以通过使用哈希表可以对XML文件进行查询。 一、使用的方法 1.Hashtable哈希表…

一文读懂:Docker从入门到进阶(超详细实践应用、零踩坑)

文章目录 快速入门简介安装配置镜像加速部署MySQL Docker基础常见命令案例-部署Nginx命令别名数据卷挂载本地目录挂载DockerFile语法自定义镜像容器网络互联 项目部署部署Java应用部署前端DockerCompose 快速入门 简介 Docker是一个快速构建、运行、管理应用的工具。 传统的…

【Linux】学习-基础IO拓展篇

Linux基础IO拓展篇—详解文件系统 理解文件系统 在Linux基础IO篇中&#xff0c;我们站在用户的视角对文件进行了理解&#xff0c;主要是针对被打开的文件&#xff0c;那么有没有没有被打开的文件呢&#xff1f;当然有&#xff01;今天我们换个视角&#xff0c;来站在系统的角…

考研数据结构笔记(7)

循环链表、静态链表、顺序表和链表的比较 循环链表循环单链表循环双链表 静态链表什么是静态链表如何定义一个静态链表&#xff1f;简述基本操作的实现 顺序表和链表的比较逻辑结构物理结构/存储结构数据的运算/基本运算创建销毁增加、删除查找 循环链表 循环单链表 循环双链表…