# MySQL怎么查看慢查詢語句
## 慢查詢的概念與重要性
慢查詢是指執行時間超過指定閾值的SQL語句。在數據庫運維和性能優化中,識別并優化慢查詢是提升系統性能的關鍵步驟。當查詢執行時間過長時,會導致:
- 數據庫連接堆積
- 系統資源消耗加劇
- 用戶體驗下降
MySQL提供了完善的慢查詢日志功能,可以幫助開發者和DBA快速定位性能瓶頸。
## 一、開啟慢查詢日志
### 1. 臨時開啟(重啟失效)
```sql
-- 查看當前慢查詢狀態
SHOW VARIABLES LIKE '%slow_query%';
-- 開啟慢查詢日志(1表示開啟)
SET GLOBAL slow_query_log = 1;
-- 設置慢查詢閾值(單位:秒)
SET GLOBAL long_query_time = 1;
-- 記錄未使用索引的查詢
SET GLOBAL log_queries_not_using_indexes = 1;
修改MySQL配置文件(my.cnf或my.ini):
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
慢查詢日志通常包含以下關鍵信息:
# Time: 2023-10-20T08:12:34.123456Z
# User@Host: root[root] @ localhost []
# Query_time: 3.141592 Lock_time: 0.000100 Rows_sent: 10 Rows_examined: 100000
SET timestamp=1600000000;
SELECT * FROM large_table WHERE unindexed_column = 'value';
MySQL自帶的分析工具:
# 查看執行時間最長的10條查詢
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log
# 查看訪問次數最多的查詢
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log
# 組合排序(按平均查詢時間)
mysqldumpslow -s at -t 10 /var/log/mysql/mysql-slow.log
更強大的第三方分析工具:
pt-query-digest /var/log/mysql/mysql-slow.log
MySQL 5.6+版本支持:
-- 開啟events_statements_history_long
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME = 'events_statements_history_long';
-- 查詢執行時間超過1秒的語句
SELECT * FROM performance_schema.events_statements_history_long
WHERE SQL_TEXT IS NOT NULL AND TIMER_WT > 1000000000;
定位到慢查詢后,使用EXPLN分析執行計劃:
EXPLN SELECT * FROM orders WHERE customer_id = 1000;
重點關注: - type列:ALL表示全表掃描 - key列:是否使用了索引 - rows列:預估掃描行數 - Extra列:Using filesort/Using temporary需要特別關注
ALTER TABLE orders ADD INDEX idx_customer_id (customer_id);
-- 優化前
SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
-- 優化后(添加日期范圍限制)
SELECT * FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'
LIMIT 1000;
-- 優化前
SELECT * FROM products WHERE price > 100;
-- 優化后(指定具體列)
SELECT product_id, product_name FROM products WHERE price > 100;
慢查詢閾值設置:
日志輪轉配置:
# 防止日志文件過大
slow_query_log_file = /var/log/mysql/mysql-slow.log
log_rotate = 1
log_rotate_size = 100M
通過系統化的慢查詢監控和優化,可以顯著提升MySQL數據庫的整體性能。建議將慢查詢分析納入日常數據庫維護流程,持續優化SQL性能。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。