在項目當中,特別是表裏面數據大量的時候,查詢非常慢,在複雜的系統中,多表關聯查詢就更加慢了,這就需要對數據庫做優化或者對查詢語句做優化,下面講一下對查詢語句做的優化,數據庫優化在此先不做講解。
默認情況下,Mysql是不啓動慢查詢日誌的,這個需要您手工開啓。
我使用的mysql版本:5.6.45
運行命令:show variables like '%quer%';
得到如下圖所示
# mysql5.6版本以上,取消了參數log_slow_queries,更改爲slow_query_log_file.這點需要大家注意一下.
默認這個slow_query_log 是OFF的,您可以使用如下命令開啓:set global slow_query_log=1來開啓。
並且還要在[mysqld]中添加如下信息:
[mysqld]
log-slow-queries=/var/log/mysql-slow.log
long_query_time = 4
log-queries-not-using-indexes
long_query_time 說明查詢時間超過幾秒記錄到日誌。
log-queries-not-using-indexes 記錄沒有使用索引的查詢記錄到日誌
使用命令再來查看就已經開啓了:show variables like '%quer%';
在Mysql5.1之後可以將慢查詢的日誌記錄放到一張表裏面。使得我們更加直觀的分析日誌,慢查詢表在mysql架構下定義爲slow_log,表結構定義如下;
使用命令:show create table mysql.slow_log;
參數log_output指定了慢查詢輸出的格式,默認爲FILE,我們可以自己設定爲table,然後就可以查詢mysql架構下的slow_log表了,如下:
show variables like 'log_output';
設置log_output的格式:set global log_output='table';
設置睡眠時間:10秒
select sleep(10);
slow_log表使用的是CSV引擎,對於大量數據(慢查詢sql語句太多)查詢可能不高,我們可以把它轉換爲MyISAM引擎來進一步提高查詢效率,但是如果您已經啓動了慢查詢,就會報錯。
命令設置引擎:alter table mysql.slow_log engine=myisam;
關閉慢查詢就可以執行成功了,如下圖