MariaDB快速批量插入資料的幾種辦法

2022-01-15 04:42:30 字數 1153 閱讀 6536

下面介紹幾種向表中快速插入資料的技術(按效率的提公升程度降序排序)。

你可以臨時禁用非唯一索引。

特別是在表中資料很少甚至沒有資料的時候,禁用非唯一索引可以極大提公升插入速度。

多數儲存引擎(至少myisam和aria是如此)的

enable keys會掃瞄表中的行並收集索引鍵值,然後對它們排序,最後建立索引塊。

因此,先禁用key,插入資料後啟用key的整體速度比每行都更新一次索引的速度至少要快乙個數量級,並且所需要的buffer也更少。

注意:當使用insertload data空表中插入資料時,mariadb會自動disable keys,插入成功後再自動enable keys

當插入海量資料時,花在完整性檢查上的時間也會很長。

可以通過

禁用unique索引以及刪除主外來鍵

約束節省時間;

此外,如果表上有

insert觸發器

,或者persistent字段,可以先刪除它們,在資料插入完成之後再重建它們。

當需要使用單行insert語句(一次插入一行)插入資料時,可以將它們放進事務中,從而避免每行一次事務(意味著每行都需要將資料sync到磁碟)。

例如,每個事務中包含1000次insert,這至少提公升1000倍插入效率。

你可以使用insert語句一次性插入多行資料,例如:

insert

into table_name values(1,"row 1"),(2, "row 2"),...;

系統變數max_allowed_packet控制了該語句允許的最大行數量。

innodb_buffer_pool_size:如果你的innodb/xtradb表中有多個索引,可增大該值

key_buffer_size:如果你的myisam表中有多個索引,可增大該值

max_allowed_packet : 增大該值以允許insert語句可以一次性插入更多的行(即增加insert語句中括號的個數)

快速向oracle中批量插入資料

當oracle表主鍵為自增型別時,可採用sql指令碼快速插入一些資料來達到豐富測試場景的目的,具體如下 begin for i in 1 5000 loop insert into table name values i,col name2,col name3 commit end loop end...

批量插入資料

drop procedure if exists pre 如果存在先刪除 delimiter 以delimiter來標記用 表示儲存過程結束 create procedure pre 建立pre 儲存方法 begin declare i int default 12 declare n int de...

MySql快速插入以及批量更新

mysql快速插入以及批量更新 插入 mysql提供了可以一次插入多條資料的用法 sql insert into tbl name a,b,c values 1,2,3 4,5,6 7,8,9 10,11,12 在程式中可以通過迴圈,新增values對應的列表,最後使用一次executeupdate...