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

MySQL SQL 語句優化 30 條鐵律:從全表掃描到索引設計的完整避坑指南

     編輯:MySQL 資料庫相關知識

30 條優化鐵律

  1. 優化查詢首要避免全表掃描,優先在 WHERE/ORDER BY 列建索引。
  2. 避免 WHERE 中用 != 或 <>,導致索引失效全掃。
  3. 避免 WHERE 中判斷 IS NULL,改用預設值(如 0)查 =0。
  4. 避免 WHERE 中用 OR 連接條件,改用 UNION ALL 分開查詢合併。
  5. LIKE '%abc%' 導致全掃,需全文索引或外部搜尋引擎。
  6. IN / NOT IN 慎用,連續值用 BETWEEN。
  7. WHERE 中用變量(@num)導致全掃,可用 FORCE INDEX 強制指定。
  8. 避免 WHERE 中對列做表達式運算(num/2=100 → num=200)。
  9. 避免 WHERE 中對列用函數(SUBSTRING(name,1,3)='abc' → name LIKE 'abc%')。
  10. 不要在 = 左側做函數/運算,阻礙索引使用。
  11. 復合索引必須遵循最左前綴,首列不在條件中則索引失效。
  12. 無意義查詢(WHERE 1=0)改用 CREATE TABLE ... LIKE。
  13. 用 EXISTS 替代 IN 子查詢,常能用上索引。
  14. 索引非越多越好:單表建議 ≤6 個,評估低選擇性列(如性別)是否必要。
  15. 避免頻繁更新聚簇索引列(主鍵),導致頁分裂與重排。
  16. 優先用數字類型代替字符類型存數值,比較快、存儲小。
  17. 用 VARCHAR 代替 CHAR,節省空間且掃描快。
  18. 嚴禁 SELECT *,顯式列出所需列。
  19. 優先用表變量代替臨時表(大數據量注意索引限制)。
  20. 避免頻繁建刪臨時表,減輕系統表壓力。
  21. 臨時表大數據用 SELECT INTO 避免大量日誌;小數據先 CREATE 再 INSERT。
  22. 存儲過程結束顯式刪除臨時表:TRUNCATE 後 DROP,避免長鎖定。
  23. 盡量避免游標,超 1 萬行必改寫;優先尋找集合解法。
  24. 小結果集可用 FAST_FORWARD 游標;帶總計的集合方案通常更快。
  25. 存儲過程/觸發器首尾設 SET NOCOUNT ON/OFF,減少網絡往返。
  26. 避免向客戶端返回超大結果集,評估業務合理性。
  27. 避免大事務,拆分為小事務提升併發。
  28. 定期 ANALYZE TABLE 更新統計信息,保證優化器決策準確。
  29. 合理設定 innodb_buffer_pool_size(實例記憶體 60-80%)。
  30. 使用 performance_schema / sys schema 監控等待事件與鎖爭用。
  31. 備份策略:全量+增量+定期驗證恢復,RPO/RTO 指標化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved