背景:使用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;
索引建的好真的一個好幫手,建不好就是費時的一個操作
目前還不知道為什么建立性別的索引會這么慢