面向高併發讀多寫少的互聯網業務,MySQL 設計核心原則:性能優於範式,冗余優於 JOIN,分片優於單表大數據。
| 場景 | 推薦引擎 | 理由 |
|---|---|---|
| 讀多寫少、全文搜索、緩存表 | MyISAM | 表鎖、無事務、COUNT(*) 極快、壓縮表 |
| 寫入頻繁、事務、行級鎖、高併發 | InnoDB | ACID、MVCC、聚簇索引、自適應哈希 |
| 日誌、歸檔、只追加 | Archive | 高壓縮、無索引 |
互聯網核心業務**默認 InnoDB**;MyISAM 僅用於非關鍵、可重建的緩存/統計表。
CHAR/INT/DATETIME),無 VARCHAR/BLOB/TEXT。優點:偏移量定位快、易恢復;缺點:佔空間大。CHAR(32) 存 MD5、TINYINT 存枚舉),輔助表用動態。
單行大小 = Σ 列定長 + 變長列平均長 + 開銷(約 20-30 字節)
表總大小 = 單行大小 × 預估行數 × 1.3 (冗余因子)
超過 2000 萬行/單表 5GB 考慮分表。
buyer_nick、seller_nick,避免關聯用戶表。| 維度 | 策略 | 適用場景 |
|---|---|---|
| 水平分表 | Hash(uid) % N → user_00~user_NN | 單表寫入/讀取瓶頸 |
| 垂直分表 | 熱/冷字段拆分 → user_base / user_ext | 行過大、熱點列更新頻繁 |
| 分庫 | 按業務域/租戶分庫 | 實例級隔離、不同備份策略 |
分片鍵選擇:查詢維度一致性(如按 uid 分,所有查詢必帶 uid),避免跨分片查詢。
COUNT(*) 需聚合各分片,考慮 Redis 緩存總數。pt-online-schema-change。