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

MySQL 效能優化進階篇(二):Schema 設計、事務隔離、分庫分表、快取與搜尋引擎架構

     編輯:MySQL 資料庫相關知識

七、高效 Schema 設計模式

適度冗餘:減少 JOIN

在讀多寫少、一致性要求可延遲的場景,將關聯表的高頻欄位冗餘到主表,以空間換時間,消除 JOIN 開銷。

垂直拆分:大欄位/低頻欄位移出

  • summary 表:僅存核心欄位,支援高頻列表查詢

  • detail 表:存大文本(TEXT/BLOB)、低頻屬性,按需 JOIN

水平拆分:分庫分表

  • Range/Hash/一致性 Hash 等路由演算法
  • 避免跨分片 JOIN、分散式事務、全域唯一 ID 生成(Snowflake/段號模式)

統計表:準實時聚合

定時任務/觸發器/ Canal 同步 Binlog 彙總統計數據,查詢直接讀統計表,避免大表 COUNT/SUM 掃描。

資料型別選型原則

場景推薦型別理由
時間戳(1970 後)TIMESTAMP (4B)比 DATETIME(8B) 省一半空間
1970 前時間DATETIME / DATETIMESTAMP 不支援
固定長度字串CHAR(M)定長存取快,不足補空格
變長字串VARCHAR(M)實際長度+1-2B 長度前綴
大文本TEXT 系列溢位頁存儲,不在行內
枚舉值集合ENUM內部 TINYINT,極省空間
IP 地址INT UNSIGNED4B,範圍查詢極快

八、事務隔離級別與選型

級別髒讀不可重複讀幻讀適用場景
READ UNCOMMITTED✅✅✅極低一致性需求,如日誌寫入
READ COMMITTED❌✅✅大多數 OLTP,需鎖定讀一致性
REPEATABLE READ (InnoDB 預設)❌❌✅金融/訂單核心業務,MVCC 實現
SERIALIZABLE❌❌❌極高一致性,效能最差,慎用

InnoDB 關鍵機制: MVCC(多版本並發控制)配合 Next-Key Lock 在 REPEATABLE READ 下實現「無幻讀」(大多數情況),但純 INSERT 仍可能出現幻讀,需評估業務容忍度。

九、可擴展架構:分庫分表策略

垂直切分(按業務模組)

優點缺點
拆分規則清晰、模組解耦、維護容易跨庫 JOIN/事務複雜、熱點表仍受限、擴展性有上限

水平切分(按數據範圍/Hash)

優點缺點
單表體積可控、寫入擴展性強、事務簡單路由規則複雜、跨分片查詢難、運維成本高

常見難題與對策

  1. 分散式事務: 拆解為本地事務 + 應用層補償(TCC/Saga),或引入 Seata/Atomikos。
  2. 跨節點 JOIN: 應用層組裝:先查驅動表取 ID 列表,再 WHERE id IN (...) 查被驅動表。
  3. 跨節點分頁排序: 各分片並行取 Top N,應用層合併排序取最終頁。

十、引入 Cache 與 Search 引擎

Cache 層(Redis / Memcached)

  • 熱點資料、Session、Token、計數器、排行榜
  • 策略:Cache-Aside / Read-Through / Write-Behind
  • 一致性:延遲雙刪、版本號、Binlog 訂閱異步更新

Search 層

  • 全文檢索、模糊搜尋、多維面向過濾、聚合統計
  • 技術棧:Elasticsearch / Solr / OpenSearch
  • 資料同步:Logstash / Canal / 自定義 Binlog 同步

Cache + Search 架構圖

總結:演進路線圖

  1. 單機優化: 索引、SQL、參數、Schema
  2. 讀寫分離: 一主多從 + Proxy(ProxySQL/MaxScale)
  3. 垂直拆分: 微服務對應獨立資料庫
  4. 水平拆分: Sharding 中間件 + 全域 ID
  5. 異構同步: Cache/Search/OLAP 同步

架構鐵律: 過早優化是萬惡之源。先建立監控基線,量化瓶頸,再以最小代價解決最大痛點。每一層架構引入都要經過「成本-收益-風險」三維評估。

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