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

MySQL 優化 23 條鐵律:從表設計到架構層的系統性能提升指南

     編輯:MySQL 資料庫相關知識

一、表設計與存儲引擎

  1. 引擎選型: InnoDB 覆蓋 95% 場景(事務/行鎖/崩潰恢復),MyISAM 僅限只讀歸檔
  2. 拒絕全表掃描: WHERE/Order By/Group By 欄位**必加索引**
  3. 索引節制: 單表 ≤ 5 個索引,每索引 ≤ 5 列,權衡寫入性能
  4. 拒絕 NULL: 定義 NOT NULL DEFAULT '',NULL 需額外位圖、統計複雜、索引失效風險
  5. 字符類型精準選: 定長 CHAR、變長 VARCHAR、大文本 TEXT,**長度剛好夠用**
  6. 命名規範: 小寫+下劃線、見名知意、idx_/uk_/pk_ 前綴

二、SQL 編寫鐵律

  1. 拒絕 <>/!=/NOT IN: 導致全表掃描,改用 IN/EXISTS/範圍查詢
  2. WHERE 列不加函數/運算: WHERE DATE(created)='2024-01-01' → 索引失效,改 WHERE created >= '2024-01-01' AND created < '2024-01-02'
  3. LIKE 僅後置 %: name LIKE 'abc%' 走索引,%abc% 全掃
  4. BETWEEN 優於 IN: 連續範圍用 BETWEEN,優化器更易走索引範圍掃描
  5. SELECT 禁用 *: 顯式列出所需列,減少網絡/IO/內存,利於覆蓋索引
  6. 大結果集必 LIMIT: 防止客戶端 OOM、網絡阻塞
  7. 刪表用 TRUNCATE: 非事務、不記 Binlog、瞬間完成,DELETE 逐行刪、產生大量 Binlog
  8. 預處理語句: 相同邏輯不同參數用 PreparedStatement,省解析/優化時間,防注入

三、連接與架構層

  1. 連接池必用: HikariCP/Druid,配置 maximumPoolSize、idleTimeout、maxLifetime
  2. 讀寫分離: SELECT 走從庫,寫入走主庫,中間件 ProxySQL/MyCat/ShardingSphere
  3. 分庫分表: 單表 > 2000萬/單庫 > 500GB 考慮分片,分片鍵業務隔離度高
  4. 緩存策略: 熱點數據 Redis 緩存,Cache-Aside 模式,雙寫一致性補償
  5. 釋放資源: ResultSet/Statement/Connection 用完即關,try-with-resources / finally
  6. 大批量操作分批: DELETE/INSERT 分批 1000-5000 行,事務提交,usleep 讓出 CPU

四、避坑補充

  1. 慢查詢日志必開: long_query_time=1、log_queries_not_using_indexes=ON、定期 pt-query-digest 分析
  2. 監控全覆蓋: QPS/TPS、慢查詢數、連接數、主從延遲、Buffer Pool 命中率、磁碟 IOPS/利用率
  3. 定期演練: PITR 恢復、主從切換、大表 DDL、故障注入,驗證預案有效性

總結

這 23 條鐵律覆蓋**設計、開發、運維、架構**全生命周期。**不求一次做到完美,但求每次 Code Review、每次架構評審、每次故障復盤都對照清單**,性能優化從「臨時抱佛腳」變為「系統工程」。

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