MySQL 8.4 版本注意事項
若要最佳化插入速度,請將許多小型操作合併為單一大型操作。理想情況下,您建立單一連線,一次傳送許多新列的資料,並延遲所有索引更新和一致性檢查直到最後。
插入一列所需的時間取決於以下因素,數字表示大約的比例
連線:(3)
傳送查詢至伺服器:(2)
剖析查詢:(2)
插入列:(1 × 列的大小)
插入索引:(1 × 索引的數量)
關閉:(1)
這沒有考慮開啟資料表的初始開銷,該開銷是針對每個並行執行的查詢執行一次。
假設是 B 樹索引,資料表的大小會使索引的插入速度減慢 log N
。
您可以使用以下方法來加快插入速度
如果您要從同一個用戶端同時插入許多列,請使用帶有多個
VALUES
清單的INSERT
語句一次插入多列。這比使用單獨的單列INSERT
語句快得多(在某些情況下快很多倍)。如果您要將資料新增至非空白資料表,您可以調整bulk_insert_buffer_size
變數,以使資料插入速度更快。請參閱 第 7.1.8 節,〈伺服器系統變數〉。當從文字檔載入資料表時,請使用
LOAD DATA
。這通常比使用INSERT
語句快 20 倍。請參閱 第 15.2.9 節,〈LOAD DATA 語句〉。利用欄具有預設值的事實。僅當要插入的值與預設值不同時才明確插入值。這減少了 MySQL 必須執行的剖析,並提高了插入速度。
請參閱第 10.5.5 節,「InnoDB 表格的大量資料載入」,取得關於
InnoDB
表格的特定提示。請參閱第 10.6.2 節,「MyISAM 表格的大量資料載入」,取得關於
MyISAM
表格的特定提示。