mysql 執行大量insert語句

2021-06-26 05:23:45 字數 3049 閱讀 9031

從其他地方拿到一些資料,形如:

insert into `alarm`(`id`,`alarmkey`,`alarmne`,`alarmsource`,`operateobj`,`alarmtypedefine`,`alarmlevel`,`pathname`,`serviceid`,`occurdate`,`cleardate`,`clearuser`,`confirmdate`,`confirmuser`,`remark`,`alarmconfirmtype`,`alarmcleartype`,`isshield`,`firsttime`,`alarmtimes`) 

values ('2c9cc85244f8cdf20144fdaa693205e2', 'mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1');

裡面的資料至少有幾萬條。

如果直接一條一條執行

1、不能直接匯入到mysql客戶端,直接死掉

2、耗費pc巨大的時間、空間

將insert語句組織成一下:

insert into `alarm`(`id`,`alarmkey`,`alarmne`,`alarmsource`,`operateobj`,`alarmtypedefine`,`alarmlevel`,`pathname`,`serviceid`,`occurdate`,`cleardate`,`clearuser`,`confirmdate`,`confirmuser`,`remark`,`alarmconfirmtype`,`alarmcleartype`,`isshield`,`firsttime`,`alarmtimes`) 

values ('2c9cc85244f8cdf20144fdaa693205e2', 'mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1'), ('2c9cc85244f8cdf20144fdaa693205e2', 'mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1'), ('2c9cc85244f8cdf20144fdaa693205e2', 'mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1'), ('2c9cc85244f8cdf20144fdaa693205e2', 'mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1'), ('2c9cc85244f8cdf20144fdaa693205e2', 'mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1');

減少sql語句的編譯次數,可以極大提高工作效率,試了一下,插入8000條資料不費勁。

還有乙個辦法,時間多個insert語句打包到乙個事務裡面:

start transaction;  

insert into `insert_table` (`datetime`, `uid`, `content`, `type`) values ('0', 'userid_0', 'content_0', 0);

insert into `insert_table` (`datetime`, `uid`, `content`, `type`) values ('1', 'userid_1', 'content_1', 1);

...

commit;

通過使用事務可以

減少資料庫執行

插入語句時多次「建立事務,提交事務」的消耗

,所有插入

都在執行後才進行提交操作。這個方法參考了:還未考證。

問題又來了,將幾萬條資料組織到一起,乙個sql語句規模還是很龐大,匯入到mysql,呃:

注意事項:

1. sql語句是有長度限制,在進行資料合併在同一sql中務必不能超過sql長度限制,通過max_allowed_packe配置可以修改,預設是1m。

2. 事務需要控制大小,事務太大可能會影響執行的效率。mysql有innodb_log_buffer_size配置項,超過這個值會日誌會使用磁碟資料,這時,效率會有所下降。所以比較好的做法是,在事務大小達到配置項資料級前進行事務提交。

MySql 學習筆記 INSERT

insert 將一行或者多行插入到表中 insert into table col1,col2.制定列名 若一一對應則可以忽略 values values1,values2.對應屬性值 插入多行 insert ignore into table col1,col2.制定列名,可以選擇忽略錯誤繼續後面...

MySQL 提高Insert效能

插入乙個記錄需要的時間由下列因素組成,其中的數字表示大約比例 這不考慮開啟表的初始開銷,每個併發執行的查詢開啟。表的大小以logn b樹 的速度減慢索引的插入。加快插入的一些方法 有選擇地用create table建立表。執行flush tables語句或命令mysqladmin flush tab...

Mysql迴圈insert資料

開發自測時,資料庫需要造大量資料時,要用到mysql儲存過程相關知識,下面分享下,希望對小夥伴們有所幫助 create procedure test 建立儲存函式 begin declare i int default1 while i 5000 do 下面的insert語法要改成自己的表,同時構造...