7.2.12 加速 INSERT
插入一條記錄花費的時間由以下幾個因素決定,後面的數字大致表示影響的比例:
連接:(3)
發送查詢給服務器:(2)
解析查詢:(2)
插入記錄:(1 x 記錄大小)
插入索引:(1 x 索引數量)
關閉:(1)
這裡並沒有考慮初始化時打開數據表的開銷,因為每次運行查詢只會做這麼一次。
如果是 B-tree 索引的話,隨著索引數量的增加,插入記錄的速度以 log N 的比例下降。
可以使用以下幾種方法來提高插入速度:
如果要在同一個客戶端在同一時間內插入很多記錄,可以使用 INSERT 語句附帶有多個 VALUES 值。這種做法比使用單一值的 INSERT 語句快多了(在一些情況下比較快)。如果是往一個非空的數據表裡增加記錄,可以調整變量 bulk_insert_buffer_size 的值使之更快。詳情請看"5.2.3 Server System Variables"。
如果要從不同的客戶端中插入大量記錄,使用 INSERT DELAYED 語句也可以提高速度。詳情請看"14.1.4 INSERT Syntax"。
對 MyISAM 而言,可以在 SELECT 語句正在運行時插入記錄,只要這時候沒有正在刪除記錄。
想要將一個文本文件加載到數據表中,可以使用 LOAD DATA INFILE。這通常是使用大量 INSERT 語句的20倍。詳情請看"14.1.5 LOAD DATA INFILE Syntax"。