首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 優化核心技巧:從減少 IO 到降低 CPU,全方位提升數據庫性能

     編輯:MySQL 資料庫相關知識

優化兩大核心目標

  1. 減少 IO 次數:數據庫 90%+ 時間消耗在 IO,優先優化收益最大;
  2. 降低 CPU 計算:ORDER BY、GROUP BY、DISTINCT 等操作消耗大量 CPU,IO 優化到瓶頸後再著手。

根本手段:改變執行計劃

所有優化最終都指向讓優化器選擇更優的執行計劃,避免全表掃描、減少回表、利用索引排序等。

五大常見誤區

誤區真相
count(1)/count(pk) 優於 count(*)MySQL 對 count(*) 有特殊優化,某些場景反而更快
count(col) = count(*)前者統計非 NULL 行數,後者統計總行數,語義與執行計劃均不同
少選列可減少 IO行存儲下,整行讀入 IO 單元(page/block),除非覆蓋索引才能減少 IO
ORDER BY 必然排序若數據已按索引順序滿足排序,優化器會省略 filesort
Explain 出現 filesort 即磁盤排序只要需排序必現 Using filesort,不代表落盤,可能在記憶體完成

十條實戰優化原則

  1. 盡量少 JOIN:MySQL 優化器統計信息有限,複雜多表 JOIN 易產生劣質計劃;
  2. 盡量少排序:善用索引順序、減少參與排序行數、非必要不排序;
  3. 避免 SELECT *:尤其配合 ORDER BY 時會擴大排序緩衝區,且失去覆蓋索引機會;
  4. 用 JOIN 替換子查詢:MySQL 子查詢執行計劃長期存在缺陷;
  5. 少用 OR:優化器處理 OR 能力弱,改用 UNION ALL;
  6. 優先 UNION ALL 而非 UNION:前者無去重排序開銷;
  7. 盡早過濾:索引列順序、分頁查詢先縮小單表再 JOIN;
  8. 避免隱式類型轉換:WHERE 列與參數類型不一致導致索引失效,轉換應在參數側;
  9. 優先優化高併發 SQL:高併發慢查詢摧毀性更大,低頻大查詢尚有緩衝;
  10. 全局視角優化索引:調整索引需考慮所有 SQL,避免顧此失彼。

工具建議

對每條運行中的 SQL 執行 EXPLAIN,收集執行計劃,建立基線,持續迭代優化。

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