mysql的慢查詢實戰+sql優化


 

背景:使用A電腦安裝mysql,B電腦通過xshell方式連接,數據內容我都已經創建好,現在我已正常的進入到mysql中

步驟1:設置慢查詢日志的超時時間,先查看日志存放路徑查詢慢日志的地址,因為有慢查詢的內容,就會到這個日志中:

show global variables like "%slow%";

2.開啟慢查詢日志

set global slow_query_log=on;

3.查看慢查詢日志的設置時間,是否是自己需要的

show global variables like "%long%";

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'

發現查數據的總時間去掉了17.74S

查看日志:打開日志

標記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';

描述extra中,表示只使用了where條件,沒有其他什么索引之類的

7.進行sql優化,建一個fist_name的索引,索引就是將你需要的數據先給篩選出來,這樣就可以節省很多掃描時間

create index firstname on employees_tmp(first_name);

 

注:創建索引時會很慢,是對整個表做了一個復制功能,並進行數據的一些分類(我猜是這樣,所以會很慢)

8.查看建立的索引

show index from employees_tmp;

 

9.在執行查詢語句,查看語句的執行時間

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

   發現時間已經有所提升了,其實選擇索引也不一開始就知道,我們在試試使用性別,gender進行索引

10.刪除已經有的索引,刪除索引:

drop index first_name on employees_tmp;

11.創建性別的索引(性別是不怎么好的索引方式,因為有很多重復數據)

create index index_gendar on employees_tmp(gender);

在執行sql語句查詢數據,查看查詢執行時間,沒有創建比較優秀的索引,導致查詢時間還變長了,

為嘛還變長了,這個我沒有弄懂

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多倍啊

查看創建的索引

show index from employees_tmp;

索引建的好真的一個好幫手,建不好就是費時的一個操作

 目前還不知道為什么建立性別的索引會這么慢

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM