背景:使用A电脑安装mysql,B电脑通过xshell方式连接,数据内容我都已经创建好,现在我已正常的进入到mysql中

步骤1:设置慢查询日志的超时时间,先查看日志存放路径查询慢日志的地址,因为有慢查询的内容,就会到这个日志中:



show global variables like "%slow%";



mysql 查询正在执行的命令 查询mysql正在执行的慢sql_大数据

2.开启慢查询日志



set global slow_query_log=on;



3.查看慢查询日志的设置时间,是否是自己需要的



show global variables like "%long%";



mysql 查询正在执行的命令 查询mysql正在执行的慢sql_mysql 查询正在执行的命令_02

4.如果不是自己想的时间,修改慢查询时间,只要超过了以下的设置时间,查询的日志就会到刚刚的日志中,我设置查询时间超过1S就进入到慢查询日志中



set global long_query_time=1;



5.大数据已准备,进行数据的查询,xshell最好开两个窗口,一个查看日志,一个执行内容



Sql查询语句:select sql_no_cache * from employees_tmp where first_name='Duangkaew' and gender='M'



mysql 查询正在执行的命令 查询mysql正在执行的慢sql_大数据_03

发现查数据的总时间去掉了17.74S

查看日志:打开日志

mysql 查询正在执行的命令 查询mysql正在执行的慢sql_sql_04

mysql 查询正在执行的命令 查询mysql正在执行的慢sql_数据库_05

标记1:执行的sql语句

标记2:执行sql的时间,我的是10点52执行的

标记3:使用那台机器

标记4:执行时间,query_tims,查询数据的时间

标记5:不知道是干嘛的

标记6:执行耗时的sql语句,我在想我1的应该是截取错了!但是记住最后一定是显示耗时是因为执行什么sql造成的

6.执行打印计划,主要是查看是否使用了索引等其他内容,主要就是在sql前面加上explain 关键字



explain select sql_no_cache * from employees_tmp where first_name='Duangkaew' and gender='M';



mysql 查询正在执行的命令 查询mysql正在执行的慢sql_mysql 查询正在执行的命令_06

描述extra中,表示只使用了where条件,没有其他什么索引之类的

7.进行sql优化,建一个fist_name的索引,索引就是将你需要的数据先给筛选出来,这样就可以节省很多扫描时间



create index firstname on employees_tmp(first_name);


 

mysql 查询正在执行的命令 查询mysql正在执行的慢sql_数据库_07

注:创建索引时会很慢,是对整个表做了一个复制功能,并进行数据的一些分类(我猜是这样,所以会很慢)

8.查看建立的索引



show index from employees_tmp;


 

mysql 查询正在执行的命令 查询mysql正在执行的慢sql_数据_08

9.在执行查询语句,查看语句的执行时间



select sql_no_cache * from employees_tmp where first_name='Duangkaew' and gender='M'



mysql 查询正在执行的命令 查询mysql正在执行的慢sql_数据_09

 发现时间已经有所提升了,其实选择索引也不一开始就知道,我们在试试使用性别,gender进行索引

10.删除已经有的索引,删除索引:



drop index first_name on employees_tmp;



11.创建性别的索引(性别是不怎么好的索引方式,因为有很多重复数据)



create index index_gendar on employees_tmp(gender);



在执行sql语句查询数据,查看查询执行时间,没有创建比较优秀的索引,导致查询时间还变长了,

为嘛还变长了,这个我没有弄懂

mysql 查询正在执行的命令 查询mysql正在执行的慢sql_sql_10

12.我们在试试使用创建组合索引,使用性别和姓名



alter table employees_tmp add index idx_union (first_name,gender);



在执行sql查看sql数据的执行时间



select sql_no_cache * from employees_tmp where first_name='Duangkaew' and gender='M'



速度提升了N多倍啊

mysql 查询正在执行的命令 查询mysql正在执行的慢sql_sql_11

查看创建的索引



show index from employees_tmp;



mysql 查询正在执行的命令 查询mysql正在执行的慢sql_数据库_12

索引建的好真的一个好帮手,建不好就是费时的一个操作

 目前还不知道为什么建立性别的索引会这么慢