首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 優化與使用集錦:引擎選擇、鎖、分表、索引、批量、NoSQL 混合架構

     編輯:MySQL 綜合教學

引擎選擇:MyISAM vs InnoDB

維度MyISAMInnoDB
讀效能優(索引壓縮、純讀快)良(Buffer Pool、MVCC)
寫效能表鎖,並發差行鎖,高並發
事務不支援支援 ACID
外鍵不支援支援
崩潰恢復無Redo/Undo Log 完整恢復
空間索引/資料分離,體積小聚簇索引,體積大
備份恢復複製 .frm/.MYD/.MYI 极快需 xtrabackup/mysqldump

建議:核心業務用 InnoDB;日誌/報表/唯讀歷史表可考慮 MyISAM。

鎖機制真相

  • SELECT COUNT(*)、ORDER BY 佔 60%+ SQL
  • InnoDB 行鎖只在 WHERE 命中主鍵/唯一索引時生效,非主鍵條件常退化為表鎖/間隙鎖
  • 大表 COUNT(*) 極慢,改用 EXPLAIN 估算行數、或維護計數表、或用 Redis 計數

資料庫規模控制

  • 單實例 ≤ 150GB,超過拆實例
  • 單庫 ≤ 300-400 張表(table_cache 壓力)
  • 帶 char 字段表 ≤ 500 萬行,純數字主鍵表 ≤ 1000 萬行
  • 一機器跑 7-8 實例,load avg 平時 1-2,峰值 ≤ 6-7

主從架構

  • 多主庫便於水平擴展
  • replicate_do_db/table 讓從庫多線程並行追主,降低延遲(管理成本↑)

多 IDC 部署

  • 跨機房同步,提升可用性至 99.999%

分表策略

策略適用場景例子
按時間日誌、流水、帳單財經系統按月分表
按 ID Hash用戶、訂單、通行證統一通行證 ID%100
按業務獨立業務線通用投票系統

MERGE 引擎加速開發

  • 邏輯表映射多子表(如周一~周日離線消息),應用只查 MERGE 表
  • 統計跨月報表:動態組合子表為 MERGE 表,無需改代碼

索引優化流程

  1. 復制表到測試環境
  2. 關閉 Query Cache 或用 SQL_NO_CACHE
  3. 基準測試:EXPLAIN 看掃描行數、PROFILING 看耗時
  4. 加候選索引,USE INDEX 強制驗證
  5. 迴歸測試,取最優
  6. 凌晨 2-3 點低峰上線
  7. 定期 OPTIMIZE TABLE(會鎖表,擇時執行)

排序分頁優化

  • 盡量用主鍵排序 ORDER BY id
  • 限制分頁深度(前 100 頁),防爬蟲觸發 LIMIT 1000000,20 全表掃描

批量寫入優化

  組件用途例子
  
    Berkeley DB / Tokyo Tyrant / LightCloud簡單 KV 業務Session、計數器、配置
    Memcached / Redis高頻更新緩衝閾值 500 次或 30 分鐘落地 DB
    Heap 補丁極高頻小表用戶在線狀態、記憶體表
  


監控與 Profiling

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