MySQL索引的使用实例

MySQL索引的使用实例前言这是我听老师讲课做的笔记,考试要看的。这是视频地址作者:陈运智关注我的csdn博客,更多Linux笔记知识还在更新本人只在csdn写博客配套这篇文章观看效果更佳MySQL索引的使用实例一.慢查询日志二.查询分析器——explain三.索引的基本使用四.复合索引五.覆盖索引一.慢查询日志//查看是否开启慢查询日志mysql>showvariableslike’%slow%’;//临时开启慢查询日志mysql>setglobalslow_q

大家好,又见面了,我是你们的朋友全栈君。

前言

这是我听老师讲课做的笔记,考试要看的。 这是视频地址
作者:陈运智
关注我的csdn博客,更多Linux笔记知识还在更新
本人只在csdn写博客

配套这篇文章观看效果更佳

一. 慢查询日志

//查看是否开启慢查询日志
mysql> show variables like '%slow%';
//临时开启慢查询日志
mysql> set global slow_query_log=ON;
//查看是否开启慢查询日志
mysql> show variables like '%slow%';

在这里插入图片描述

//查询超过多少时间就可以记录,上面是如果超过10秒就要记录
mysql> show variables like '%long%';
//改成一秒,如果超过一秒就写到慢日志里面去(一般一秒是最好的)
mysql> set long_query_time=1;
//查看日记存储方式,默认FILE
mysql> show variables like '%log_output%';
// 慢查询日志文件所在位置
mysql> show variables like '%datadir%';

在这里插入图片描述

//响应时间是3秒,超过了原先设定的一秒
mysql> select sleep(3);

在这里插入图片描述
我们去文件夹里面查看时发现它已经被存入慢查询日记里面

在这里插入图片描述

这部分写明了如何通过慢日志找出比较慢的SQL,后面部分要说为什么慢,如何能更快一点。

二. 查询分析器——explain

作用:通过这个可以知道查看sql慢在哪里,需要朝那些方面优化

列:我们创建一个employee数据表

create table employee(
	id int not null auto_increment primary key,
	name varchar(30) comment '姓名',
	sex varchar(1) comment '性别',
	salary int comment '薪资(元)',
	dept varchar(30) comment '部门'
);

insert into employee(name, sex, salary, dept) values('张三', '男', 5500, '部门A');
insert into employee(name, sex, salary, dept) values('李洁', '女', 4500, '部门C');
insert into employee(name, sex, salary, dept) values('李小梅', '女', 4200, '部门A');
insert into employee(name, sex, salary, dept) values('欧阳辉', '男', 7500, '部门C');
insert into employee(name, sex, salary, dept) values('李芳', '女', 8500, '部门A');
insert into employee(name, sex, salary, dept) values('张江', '男', 6800, '部门A');
insert into employee(name, sex, salary, dept) values('李四', '男', 12000, '部门B');
insert into employee(name, sex, salary, dept) values('王五', '男', 3500, '部门B');
insert into employee(name, sex, salary, dept) values('马小龙', '男', 6000, '部门A');
insert into employee(name, sex, salary, dept) values('龙五', '男', 8000, '部门B');
insert into employee(name, sex, salary, dept) values('冯小芳', '女', 10000, '部门C');
insert into employee(name, sex, salary, dept) values('马小花', '女', 4000, '部门B');
insert into employee(name, sex, salary, dept) values('柳峰', '男', 8800, '部门A');

在这里插入图片描述

//通过explain解读他,后面加一个\G便于阅读
mysql> explain select * from employee where name='柳峰'\G;
//扫描快捷
mysql> explain select * from employee where id=13\G;

在这里插入图片描述

效果:如下图,可以看之前为什么那么慢,需要四秒响应时间

在这里插入图片描述

三. 索引的基本使用

mysql> show index from employee\G;
//主键会默认建一个id索引

在这里插入图片描述

创建索引 效率提升

//查询分析
mysql> explain select * from employee where name='柳峰';
//创建普通索引
mysql> create index idx_name on employee(name);

在这里插入图片描述

//删除
mysql> drop index idx_name on employee;

在这里插入图片描述
老师 事列:
在这里插入图片描述

如过用like检索,效率还是不变,所以要看你怎么用

在这里插入图片描述

四. 复合索引

//查的时候可以看到一个主键索引
mysql> show index from employee\G;

在这里插入图片描述

目前是all全局扫描

select * from employee where name ='柳峰';
//查询分析
explain select * from employee where name ='柳峰'\G;

在这里插入图片描述

创建索引

//创建索引
create index idx_name_salary_dept on employee(name,salary,dept);
//查询分析
explain select * from employee where name ='柳峰'\G;

在这里插入图片描述

验证有name就能索引

// name和salary
mysql> explain select * from employee where name ='柳峰' and salary=8800\G;
//name和dept
mysql> explain select * from employee where name ='柳峰' and dept='部门A'\G;

在这里插入图片描述

没有name就不能使用索引

mysql> explain select * from employee where  salary=8800;

mysql> explain select * from employee where  dept='部门A';

在这里插入图片描述

五. 覆盖索引

按照上面步骤,我们可以看到四个索引,第一个是主键索引,后面是复合索引name_salary_dept

mysql> show index from employee;

在这里插入图片描述
如何触发

我们用id作为查询数据

mysql> select * from employee;

mysql> select * from employee where id =11;

在这里插入图片描述

只查id

mysql> explain select id from employee  employee where id=11\G;

mysql> explain select id from employee\G;

在这里插入图片描述

//查name,salary
mysql> explain select name,salary from employee;

//查name,salary,dept
mysql> explain select name,salary,dept from employee;

//因为没有sxe条件,所以只能做全部扫描type为null
mysql> explain select name,sex,salary,dept from employee;

在这里插入图片描述

本人博客:https://blog.csdn.net/weixin_46654114
本人b站求关注:https://space.bilibili.com/391105864
转载说明:跟我说明,务必注明来源,附带本人博客连接。

请给我点个赞鼓励我吧
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152609.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • webrtc rtmp推流_海康rtmp协议格式

    webrtc rtmp推流_海康rtmp协议格式EasyRTMP介绍EasyRTMP是结合了多种音视频缓存及网络技术的一个rtmp直播推流端,包括:圆形缓冲区(circularbuffer)、智能丢帧、自动重连、rtmp协议等等多种技术,能够非常

  • 【学习笔记】神经内科常用量表总结(文后有下载链接)[通俗易懂]

    在看文献时经常会遇到不同的神经内科量表,因此做个总结笔记,以便对应查找。(具体量表可自行搜索,或在最后的链接中下载。)目录1、GlsgowComaScale(GCS)昏迷评分法2、ABCD2评分量表3、NationalInstituteofHealthstrokescale(NIHSS)美国国立卫生研究院卒中量表4、Oxfordhandicapscale(OHS)牛津残障评分5、Mini-mentalStateExamination(MMSE)简易精神.

  • linux上彻底删除docker_docker ubuntu镜像

    linux上彻底删除docker_docker ubuntu镜像ubuntu中docker彻底卸载

  • SpringBoot集成Activiti6教程

    SpringBoot集成Activiti6教程第一步在项目pom.xml文件中添加所需依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="htt

  • mac idea 2021激活码【2021免费激活】

    (mac idea 2021激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSWQi…

  • oracle优化书籍推荐

    经常听到有做应用的朋友抱怨数据库的性能问题,比如非常低的并发,令人崩溃的响应时间,长时间的锁等待,锁升级,甚至是死锁,等等。本文针对应用开发人员经常接触的性能问题,推荐几本书,请大家关注。 一、《 oracle9i/10g 编程艺术》内容简介 本书是一本关于Oracle9jaz&10g数据库体系结构的权威图书,涵盖了所有最重要的Ora

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号