MySQL 是開發者最常用的資料庫之一。本文匯總 MySQL 開發中的核心常識,涵蓋儲存引擎選型、索引設計原則、大批量插入優化等關鍵主題,助你構建高效穩健的資料庫應用。
針對 MySQL 5.x 版本,重點比較兩大主流引擎:
無索引的大表查詢效能極差。合理設計索引需遵循以下原則:
表 user 有聯合索引 user(username, `order`, email)。
EXPLAIN SELECT * FROM user WHERE username='leehui' → type=ref,索引生效。
EXPLAIN SELECT * FROM user WHERE pwd='123' → type=ALL,全表掃描,索引失效(未用到最左列)。
WHERE username LIKE 'lee%' → type=range,索引生效(通配符不在首位)。WHERE username LIKE '%lee' → type=ALL,索引失效(通配符在首位)。執行 SHOW STATUS LIKE 'Handler_read_key'。若值很高說明索引生效;若 Handler_read_rnd_next 偏高,表示查詢低效、索引設計不合理。
高併發大量插入會導致負載飆升。優化核心在於減少網路往返與語句解析次數:
-- 低效:多條單獨 INSERT
INSERT INTO test VALUES ('aa','bb');
INSERT INTO test VALUES ('cc','dd');
-- 高效:單條多值 INSERT
INSERT INTO test VALUES ('aa','bb'), ('cc','dd'), ('ee','ff');
實戰中,百萬級併發插入可改用 INSERT DELAYED:數據先入記憶體隊列,資料庫閒時寫入,立即返回成功。注意:無法使用 LAST_INSERT_ID(),極重要數據不建議用此語句,防數據丟失。
MyISAM 預設最大 4GB。單表超限會無法訪問。解決:
ALTER TABLE user MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000;
InnoDB 理論支援 6TB,無此限制。