实例介绍MySQL索引的使用


本文摘自PHP中文网,作者coldplay.xixi,侵删。

mysql教程栏目实例讲解MySQL索引的使用

更多相关免费学习推荐:mysql教程(视频)

MySQL索引的使用实例

    • 一. 慢查询日志
    • 二. 查询分析器――explain
    • 三. 索引的基本使用
    • 四. 复合索引
    • 五. 覆盖索引

一. 慢查询日志

1

2

3

4

//查看是否开启慢查询日志

mysql> show variables like '%slow%';//临时开启慢查询日志

mysql> set global slow_query_log=ON;//查看是否开启慢查询日志

mysql> show variables like '%slow%';

在这里插入图片描述

1

2

3

4

//查询超过多少时间就可以记录,上面是如果超过10秒就要记录

mysql> show variables like '%long%';//改成一秒,如果超过一秒就写到慢日志里面去(一般一秒是最好的)mysql> set long_query_time=1;//查看日记存储方式,默认FILE

mysql> show variables like '%log_output%';// 慢查询日志文件所在位置

mysql> show variables like '%datadir%';

在这里插入图片描述

1

2

//响应时间是3秒,超过了原先设定的一秒

mysql> select sleep(3);

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

在这里插入图片描述

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

二. 查询分析器――explain

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

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

1

2

3

4

5

6

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');

在这里插入图片描述

1

2

3

//通过explain解读他,后面加一个\G便于阅读

mysql> explain select * from employee where name='柳峰'\G;//扫描快捷

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

在这里插入图片描述

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

在这里插入图片描述

三. 索引的基本使用

1

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

在这里插入图片描述

创建索引 效率提升

1

2

3

//查询分析

mysql> explain select * from employee where name='柳峰';//创建普通索引

mysql> create index idx_name on employee(name);

在这里插入图片描述

1

2

//删除

mysql> drop index idx_name on employee;

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

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

在这里插入图片描述

四. 复合索引

1

2

//查的时候可以看到一个主键索引

mysql> show index from employee\G;

在这里插入图片描述

目前是all全局扫描

1

2

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

explain select * from employee where name ='柳峰'\G;

在这里插入图片描述

创建索引

1

2

3

//创建索引

create index idx_name_salary_dept on employee(name,salary,dept);//查询分析

explain select * from employee where name ='柳峰'\G;

在这里插入图片描述

验证有name就能索引

1

2

3

// 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就不能使用索引

1

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

在这里插入图片描述

五. 覆盖索引

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

1

mysql> show index from employee;

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

我们用id作为查询数据

1

mysql> select * from employee;mysql> select * from employee where id =11;

在这里插入图片描述

只查id

1

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

在这里插入图片描述

1

2

3

4

//查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;

在这里插入图片描述

以上就是实例介绍MySQL索引的使用的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

如何解决mysql个别文字乱码的问题

一些常用的mysql优化方法总结

如何解决mysql odbc安装丢失的问题

mysql密码加密与解密详解

mysql建表语句是什么

mysql如何查询一天内的数据

mysql关于统计数量的sql查询操作

mysql储存文字用什么

mysql下载和安装的步骤教程(详细)

21条mysql优化建议(经验总结)

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...