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 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.如果是因为表的数据过多了可以考虑进行分库,分表

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 基于springboot+vue的民宿管理系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

喝酒到天亮,时刻不敢忘,人间值得——“早”读

春节你小酌了嘛&#xff1f; 引言代码第一篇 人民日报 【夜读】这三句话&#xff0c;致新一年的自己第二篇&#xff08;跳&#xff09;李白如何穿越“来”春晚&#xff1f;揭秘→第三篇&#xff08;跳&#xff09;人民日报 来啦 新闻早班车要闻社会 政策结尾 引言 完蛋 这个早读…

1. pick gtk dll 程序的制作

文章目录 前言预览细节要点初始窗口尺寸提示音快速提示信息对话框AlertDialog鼠标移入移出事件布局与父子控件关系图片 后续源码及资源 前言 在之前的打包测试中我提到了需要一个挑选dll的程序于是我打算用Gtk来制作这个程序 预览 细节要点 初始窗口尺寸 只有主窗口有set_d…

数学建模:K-means聚类手肘法确定k值(含python实现)

原理 当K-means聚类的k值不被指定时&#xff0c;可以通过手肘法来估计聚类数量。   在聚类的过程中&#xff0c;随着聚类数的增大&#xff0c;样本划分会变得更加精细&#xff0c;每个类别的聚合程度更高&#xff0c;那么误差平方和&#xff08;SSE&#xff09;会逐渐变小&am…

【数据存储+多任务爬虫】

数据存储 peewee模块 第三方模块&#xff0c;也需要在cmd中安装。 from peewee import *db MySQLDatabase("spider",host"127.0.0.1",port3306,userroot,password123456 )# 类》表 class Person(Model):name CharField(max_length20) # 类型/约束bi…

基于python深度学习的中文情感分析的系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

利用pandas库进行数据分析

一.这段代码的主要目的是读取IMDB电影数据集&#xff0c;并进行一些基本的数据分析 # codingutf-8 import pandas as pd import numpy as np from matplotlib import pyplot as plt# 定义CSV文件的路径 file_path ./IMDB-Movie-Data.csv# 使用pandas的read_csv函数读取CSV文件…

Codeforces Round 113 (Div. 2)E. Tetrahedron(dp、递推)

文章目录 题面链接题意题解代码总结 题面 链接 E. Tetrahedron 题意 从一个顶点出发走过路径长度为n回到出发点的方案总数 题解 考虑dp f [ i ] [ 0 ∣ 1 ∣ 2 ∣ 3 ] f[i][0|1|2|3] f[i][0∣1∣2∣3]:走了i步&#xff0c;现在在j点的方案总数 转移&#xff1a; f [ i ]…

力扣(LeetCode)数据结构练习题

今天来分享两道力扣&#xff08;LeetCode&#xff09;的题目来巩固上篇时间复杂度和空间复杂度的知识&#xff0c;也就是在题目上加上了空间复杂度和时间复杂度的限制。 目录 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c…

ubuntu下如何查看显卡及显卡驱动

ubuntu下如何查看显卡及显卡驱动 使用nvidia-smi 工具查看 查看显卡型号nvida-smi -L $ nvidia-smi -L GPU 0: NVIDIA GeForce RTX 3050 4GB Laptop GPU (UUID: GPU-4cf7b7cb-f103-bf56-2d59-304f8996e28c)当然直接使用nvida-smi 命令可以查看更多信息 $ nvidia-smi Mon Fe…

关于在分布式环境中RVN和使用场景的介绍3

简介 在《关于在分布式环境中RVN和使用场景的介绍2》和《关于在分布式环境中RVN和使用场景的介绍1》中我们介绍了RVN的概念和在一些具体用例中的使用。在本文中我们讨论一下在分布式环境中使用RVN需要注意的问题。 问题 我们在收到一条待处理的事件时&#xff0c;需要检查该…

2024.2.9

作业1 请使用递归实现n&#xff01; #include<stdio.h> #include<string.h> #include<stdlib.h>int fun(int m) {if(m0)return 1;else{return m*fun(m-1);} } int main(int argc, const char *argv[]) {int m;printf("please enter m:");scanf(&…

MySQL 升级脚本制作

当数据库更新字段后或添加一些基础信息&#xff0c;要对生产环境进行升级&#xff0c;之前都是手动编写sql&#xff0c;容易出错还容易缺失。 通过 Navcat 工具的数据库结构同步功能和数据同步功能完成数据库脚本的制作。 一、结构同步功能 1、选择 工具–结构同步&#xff1…

从零开始实现消息队列(一)

从零开始实现消息队列 .什么是消息队列需求分析核心概念模型 . 什么是消息队列 相信大家都了解过阻塞队列和生产者消费者模型,而阻塞队列最大的用途,就是用于实现生产者消费者模型,生产者消费者模型有以下好处: 解耦合 解释: 当主机A给主机B发消息时,A给B发送请求,B给A返回响应…

CTFshow web(php命令执行59-67)

web59 <?php /* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com */ // 你们在炫技吗&#xff1f; if(isset($_POST…

2024.2.8

1. 现有文件test.c\test1.c\main.c,编写Makkefile Makefile&#xff1a; CCgcc EXEa.out OBJS$(patsubst %.c,%.o,$(wildcard *.c)) CFLAGS-c -oall:$(EXE)$(EXE):$(OBJS)$(CC) $^ -o $%.o:%.c$(CC) $(CFLAGS) $ $^.PHONY:cleanclean:rm $(OBJS) $(EXE) 2. C编程实现&#x…

基于Java (spring-boot)的音乐管理系统

一、项目介绍 播放器的前端&#xff1a; 1.首页&#xff1a;点击歌单中的音乐播放列表中的歌曲进行播放&#xff0c;播放时跳转播放界面&#xff0c;并显示歌手信息&#xff0c;同时会匹配歌词&#xff0c;把相应的歌词显示在歌词面板中。 2.暂停&#xff1a;当歌曲正在播放时…

5G NR 信道号计算

一、5G NR的频段 增加带宽是增加容量和传输速率最直接的方法&#xff0c;目前5G最大带宽将会达到400MHz&#xff0c;考虑到目前频率占用情况&#xff0c;5G将不得不使用高频进行通信。 3GPP协议定义了从Sub6G(FR1)到毫米波(FR2)的5G目标频谱。 其中FR1是5G的核心频段&#xff0…

155基于matlab 的形态学权重自适应图像去噪

基于matlab 的形态学权重自适应图像去噪&#xff1b;通过串并联的滤波降噪对比图&#xff0c;说明并联降噪的优越性。输出降噪前后图像和不同方法的降噪情况的信噪比。程序已调通&#xff0c;可直接运行。 155matlab 自适应图像降噪 串并联降噪 (xiaohongshu.com)

QT:实现图片选择器

一、效果图 二、用到的类 qApp&#xff1a;可以快速获取到项目目录位置。 QSettings &#xff1a;编写config文件&#xff0c;记录上次打开图片的位置&#xff0c;下次打开图片会从上次的位置查找图片。 QPixmap&#xff1a;用于图片的缩放&#xff0c;防止图片过小&#xff0…