在mysql中,慢查詢就是日誌中記錄運行比較慢的SQL語句,指的是執行超過「long_query_time」參數設定的時間閾值的SQL語句查詢。慢查詢記錄在慢查詢日誌中,透過慢查詢日誌,可以找出哪些查詢語句的執行效率低,以便進行最佳化。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
慢查詢,顧名思義,就是在日誌中記錄運行比較慢的SQL語句,是指mysql記錄所有執行超過long_query_time參數設定的時間閾值的SQL語句查詢。
慢查詢記錄在慢查詢日誌中,透過慢查詢日誌,可以找出哪些查詢語句的執行效率低,以便進行最佳化。此日誌能為SQL語句的最佳化帶來很好的幫助。
預設情況下,慢查詢日誌是關閉的,要使用慢查詢日誌功能,首先要開啟慢查詢日誌功能。
配置了慢查詢後,它會記錄符合條件的SQL
包括:
透過下方指令查看下上面的設定:
show VARIABLES like '%slow_query_log%' show VARIABLES like '%slow_query_log_file%' show VARIABLES like '%long_query_time%' show VARIABLES like '%log_queries_not_using_indexes%' show VARIABLES like 'log_output'
設定慢查詢的參數:
set global long_query_time=0; ---默认10秒,这里为了演示方便设置为0 set GLOBAL slow_query_log = 1; --开启慢查询日志 set global log_output='FILE,TABLE' --项目开发中日志只能记录在日志文件中,不能记表中
設定完成後,查詢一些清單可以發現慢查詢的日誌檔裡面有資料了。
但是在我的電腦上,我不知道為啥,這個時間總是無法正常的執行sql結果。更新不了;
所以我們用這樣的方法就可以了:
找到my.cnf,加入如下內容
# 添加慢查询日志 log_output=file slow_query_log=on slow_query_log_file = /tmp/mysql-slow.log log_queries_not_using_indexes=on long_query_time = 1
如果你想查看哪些查詢語句的執行效率低,可以從慢查詢日誌中取得資訊。就像錯誤日誌、查詢日誌一樣,慢查詢日誌也是以文字檔案的形式儲存的,可以使用普通的文字檔案檢視工具來查看。
範例1
開啟MySQL 慢查詢日誌功能,並設定時間,指令與執行過程如下:
mysql> SET GLOBAL slow_query_log=ON; Query OK, 0 rows affected (0.05 sec) mysql> SET GLOBAL long_query_time=0.001; Query OK, 0 rows affected (0.00 sec)
由於需要示範這裡我們將時間設定為了0.001 秒,執行時間超過0.001 秒的SQL 語句將會被記錄到日誌中。
查詢tb_student 表中的數據,SQL 語句和執行過程如下:
mysql> USE test; Database changed mysql> SELECT * FROM tb_student; +----+--------+ | id | name | +----+--------+ | 1 | Java | | 2 | MySQL | | 3 | Python | +----+--------+ 3 rows in set (0.08 sec)
對應的,慢查詢日誌的部分內容如下:
# Time: 2020-06-01T01:59:18.368780Z # User@Host: root[root] @ localhost [::1] Id: 3 # Query_time: 0.006281 Lock_time: 0.000755 Rows_sent: 2 Rows_examined: 1034 use test; SET timestamp=1590976758; SHOW VARIABLES LIKE 'slow_query%';
慢查詢日誌的刪除方法與通用日誌的刪除方法是一樣的。可以使用 mysqladmin 指令來刪除。也可以使用手工方式刪除。 mysqladmin 指令的語法如下:
mysqladmin -uroot -p flush-logs
執行指令後,指令列會提示輸入密碼。輸入正確密碼後,將執行刪除操作。新的慢查詢日誌會直接覆蓋舊的查詢日誌,不需要再手動刪除。
資料庫管理員也可以手動刪除慢查詢日誌,刪除之後需要重新啟動 MySQL 服務。
注意:通用查詢日誌和慢查詢日誌都是使用這個指令,使用時一定要注意,一旦執行這個指令,通用查詢日誌和慢查詢日誌都只存在新的日誌檔案中。如果需要備份舊的慢查詢日誌文件,必須先將舊的日誌改名,然後重新啟動 MySQL 服務或執行 mysqladmin 指令。
【相關推薦:mysql影片教學】
以上是什麼是mysql慢查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!