首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL SQL 語句優化完整指南:從監控到實戰

     編輯:MySQL 綜合教學

MySQL SQL 語句優化完整指南:從監控到實戰

SQL 語句優化是資料庫效能調校的核心環節。本文系統梳理 MySQL 優化的標準流程,涵蓋狀態監控、慢查詢定位、執行計劃分析及具體優化策略,助你快速定位效能瓶頸。

一、SQL 優化的四大標準步驟

  1. 掌握 SQL 執行頻率:透過 SHOW [SESSION|GLOBAL] STATUS 觀察 Com_select、Com_insert、Com_update、Com_delete 等計數器,快速判斷業務是「讀多寫少」還是「寫多讀少」。
  2. 定位低效 SQL:開啟慢查詢日誌(slow_query_log),設定閾值(預設 10 秒),自動記錄超時語句。
  3. EXPLAIN 深度分析:在慢 SQL 前加 EXPLAIN,重點關注 type(連接類型)、key(實際用到的索引)、rows(預估掃描行數)、Extra(Using index / Using where / Using filesort 等提示)。
  4. 針對性優化:根據分析結果,補索引、改寫 SQL、調整參數或架構拆分。

二、核心監控指標詳解

變數含義適用場景
Com_selectSELECT 執行次數評估讀負載佔比
Com_insertINSERT 執行次數(批次算 1 次)評估寫入頻率
Com_updateUPDATE 執行次數評估更新熱度
Com_deleteDELETE 執行次數評估刪除頻率
Innodb_rows_readInnoDB 讀取行數精確量化全表掃描代價
Innodb_rows_insertedInnoDB 插入行數監控批量導入效率
slow_queries慢查詢累計次數判斷是否需調整 long_query_time
connections嘗試連線總數(含失敗)排查連線風暴
uptime服務運行秒數計算 QPS/TPS 基準

三、慢查詢日誌實戰配置

# 1. 永久生效請寫入 my.cnf [mysqld] 區段
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1          # 建議生產環境設 1 秒
log_queries_not_using_indexes = 1  # 記錄無索引查詢

# 2. 即時生效(重啟失效)
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 1;

四、常見優化手段速查

  • 加索引:優先覆蓋 WHERE、JOIN、ORDER BY、GROUP BY 欄位;遵循「最左前綴」原則。
  • 避免 SELECT *:只取需要欄位,減少網路傳輸與緩存壓力。
  • 分頁優化:大偏移量改用 WHERE id > last_id LIMIT n 或覆蓋索引子查詢。
  • 批量操作:INSERT ... VALUES (),(),() 或 LOAD DATA INFILE 替代單條插入。
  • 調整隔離級別:讀多寫少場景可考慮 READ COMMITTED 降低鎖競爭。

五、驗證優化成果

# 觀察 Handler 計數器
SHOW GLOBAL STATUS LIKE 'Handler_read%';
# Handler_read_key 越高越好(索引命中)
# Handler_read_rnd_next 越低越好(全表掃描)

持續監控、定期複盤,才能讓 MySQL 始終保持高效穩定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved