Mysql數(shù)據(jù)庫(kù),非mariadb。給某張表插入數(shù)據(jù),方法:寫存儲(chǔ)過程
過程如下:
delimiter //
create procedure proc1()
begin
set @a=1;
while @a<10000001do
insert into uc_play_log(app_id,bobo_client_id,content_code,content_type,create_time,event,main_folder,play_time,title,user_id) values('bobo',1.101,'002','vod','2018-05-12 11:08:11','playing','驚悚','200','電鋸驚魂2','test001');
set @a=@a+1;
end while;
end
//
delimiter ;
執(zhí)行
call proc1();
注意:mariadb和mysql不一樣的常遂,此處只是對(duì)于Mysql的操作。
原來造的測(cè)試數(shù)據(jù)都很少挽荠,沒有發(fā)現(xiàn)當(dāng)有百萬級(jí)別的數(shù)據(jù)的時(shí)候克胳,插入原來是那么慢的。
5分鐘才插入不到2萬條坤按,我的內(nèi)心是崩潰的毯欣,于是百度各種方法,終于找到一個(gè)臭脓。
便是改 mysql的這個(gè)參數(shù): InnoDB_flush_log_at_trx_commit
看看該參數(shù)的解釋:
這個(gè)參數(shù)控制緩沖區(qū)的數(shù)據(jù)寫入到日志文件以及日志文件數(shù)據(jù)刷新到磁盤的操作時(shí)機(jī).在正式環(huán)境中建議設(shè)置成1酗钞。
設(shè)置0時(shí)日志緩沖每秒一次被寫到日志文件,并且對(duì)日志文件做向磁盤刷新的操作,但是在一個(gè)事物提交不做任何操作.
設(shè)置1時(shí)在每個(gè)事物提交時(shí),日志緩沖被寫到日志文件,并且對(duì)日志文件做向磁盤刷新的操作
設(shè)置2時(shí)在每個(gè)事物提交時(shí),日志緩沖被寫到日志文件,但不對(duì)日志文件做向磁盤刷新的操作,對(duì)日志文件每秒向磁盤做一次刷新操作.
此參數(shù)不設(shè)置的話默認(rèn)值是1,要是改的話后果就是可能會(huì)丟失數(shù)據(jù)来累,因?yàn)槭?s提交一次砚作,而不是每次事務(wù)提交時(shí)就提交。但是造數(shù)據(jù)一般在測(cè)試環(huán)境嘹锁,我覺得先改為0 也沒有什么大的影響葫录,造好數(shù)據(jù)可以再改回去。
這個(gè)參數(shù)要在 my.cnf配置里面設(shè)置领猾,直接在mysql客戶端設(shè)置貌似不生效的米同。
設(shè)置后再插入,1000萬大概10分鐘摔竿,百萬不到1分鐘面粮,可以了吧。