MySQL 優化聚焦最高頻兩大操作:插入 (寫入) 與 查詢 (讀取)。本文彙總 20 條經驗驗證策略,含大量導入、批次寫入、索引控制、事務鎖、分頁優化、配置調優等,可直接落地執行。
LOAD DATA LOCAL INFILE 'C:/data/news.txt' INTO TABLE news
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'
(content, date, ip, author, subject);
VALUES,減少網路往返與解析開銷。
INSERT INTO food VALUES
(NULL,'A','FactoryA',1.5,'2007',2,'Beijing'),
(NULL,'B','FactoryB',20,'2002',5,'Tianjin'),
(NULL,'C','FactoryC',14,'2003',3,'Guangdong');
INT 固定 4 Bytes,VARCHAR(20) 夠用別定 255,但預留業務擴展空間。ENGINE=MyISAM 或 SET autocommit=1 單條自動提交。核心業務嚴禁。ALTER TABLE t DISABLE KEYS; (僅 MyISAM 有效,InnoDB 忽略)。導入後 ENABLE KEYS 重建。SET UNIQUE_CHECKS=0; 導入 → SET UNIQUE_CHECKS=1; 重開。InnoDB 有效,大幅減少唯一索引檢查開銷。LOCK TABLES t WRITE; INSERT ...; UNLOCK TABLES; 索引緩衝區僅刷盤一次。單條大 INSERT 無需顯式鎖。concurrent_insert=2 (MyISAM),表尾並行插入即使有刪除空洞。INSERT DELAYED (MyISAM/5.6+ 廢棄),客戶端立即返回,伺服器排隊寫入。適用日誌/統計類非即時業務。OPTIMIZE TABLE 整理碎片。type、key、rows、Extra,定位全表掃描、臨時表、排序、索引未命中。| 參數 | 建議 | 監控指標 |
|---|---|---|
key_buffer_size | 記憶體 25% (MyISAM) | Key_reads/Key_read_requests |
innodb_buffer_pool_size | 記憶體 60-80% | Innodb_buffer_pool_reads/Requests |
read_buffer_size | 256K-4M | 全表掃描耗時 |
table_open_cache | max_connections * N | Opened_tables/Uptime |
long_query_time | 1-2 秒 | 慢查詢日誌分析 |
SELECT * FROM t WHERE status=1 LIMIT 1LIMITlong_query_time=1),每日分析 Top 10EXPLAIN 無 type=ALL/index、無 Using temporary/filesort
3. 寫入峰值 Innodb_row_lock_waits < 10/秒、Innodb_row_lock_time_avg < 10ms
4. 緩存命中率 Qcache_hits/(Qcache_hits+Com_select) > 90% (若開啟 Query Cache)
5. 磁碟 IOPS 使用率 < 70%,留擴容餘量
6. 主從延遲 < 1 秒 (關鍵業務 < 100ms)
優化無銀彈,唯有「測量 → 定位 → 調整 → 驗證」閉環。插入優化重在減少交互與索引維護開銷;查詢優化重在索引設計與執行計劃分析。將 20 條策略內化為 Code Review 標準與架構決策依據,效能提升自然水到渠成。