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

MySQL 效能調優八大黃金法則(上)

     編輯:MySQL 資料庫相關知識

1. 選擇最緊湊的欄位類型

  • 郵遞區號用 CHAR(6) 而非 VARCHAR(255)。
  • 整數優先 MEDIUMINT(3 字節)而非 BIGINT(8 字節)。
  • 固定值集合(省份、性別)用 ENUM,內部以整數存儲,比較速度快於字串。
  • 可為 NULL 的欄位改為 NOT NULL DEFAULT '' 或預設值,消除 NULL 判斷開銷。

2. 用 JOIN 取代子查詢

子查詢需建立臨時表,JOIN 直接在索引間穿梭。MySQL 5.6+ 雖優化了子查詢,但複雜場景 JOIN 仍更穩定。

3. 用 UNION ALL 取代手工臨時表

多條件合併查詢時,UNION ALL 避免去重排序,效能遠優於建臨時表再 INSERT。

4. 事務保障資料一致性

BEGIN;
INSERT INTO orders ...;
INSERT INTO order_items ...;
COMMIT;  -- 若中間失敗,ROLLBACK 回滾

注意:長事務會鎖定資源阻塞並發,控制事務範圍與執行時間。

5. 表鎖 vs 行鎖權衡

LOCK TABLES 獨佔模式簡單但並發極差。InnoDB 行鎖粒度細,配合事務隔離等級(READ COMMITTED/REPEATABLE READ)在大多數場景更優。

6. 外鍵約束:關聯完整性的守門員

FOREIGN KEY (customer_id) REFERENCES customers(id) 確保孤兒資料不入庫。但高併發下外鍵檢查有額外開銷,核心交易鏈路可在應用層保證、資料庫層關閉外鍵。

7. 索引策略:建在 WHERE/JOIN/ORDER BY 欄位上

  • 高選擇性欄位(唯一值多)索引效果佳;低選擇性(如性別、狀態)索引反而拖慢寫入。
  • ENUM、SET 類型通常不宜建索引。
  • 全文搜尋僅支援 MyISAM FULLTEXT,大量資料先載入再建索引最快。

8. SQL 改寫讓索引生效

核心原則:欄位保持「裸露」狀態,所有運算移至常數側。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
低效寫法高效寫法原理
WHERE YEAR(dt) < 2001WHERE dt < '2001-01-01'函數導致索引失效
WHERE amount/7 < 24WHERE amount < 24*7運算在常數側,欄位保持原樣
WHERE name LIKE 'MySQL%'WHERE name >= 'MySQL' AND name < 'MySQM'範圍查詢可用索引,LIKE 通配符前綴不可用