第一種方法: 使用insert into 插入 for 循環(huán)sql插入數(shù)據(jù)
????$param = [‘id’=>1];
????set_time_limit(0);
????echo date(“H:i:s”);
????for($i=0;$i<2000000;$i++){
????????$db->Insert($param,$table,true);
????};
????echo date(“H:i:s”);
第二種方法: 使用事務(wù)提交夺鲜,批量插入數(shù)據(jù)庫(kù)(每隔10W條提交下)最后顯示消耗的時(shí)間為:22:56:13 23:04:00 ,一共8分13秒? 卢鹦,代碼如下:
echo date(“H:i:s”);
$connect_mysql->query(‘BEGIN');
$params = array(‘value'=>'50′);
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query(‘COMMIT');
$connect_mysql->query(‘BEGIN');
}
}
$connect_mysql->query(‘COMMIT');
echo date(“H:i:s”);
第三種方法:使用優(yōu)化SQL語(yǔ)句:將SQL語(yǔ)句進(jìn)行拼接,使用insert into table()values(),(),(),()然后再一次性插入匿又,如果字符串太長(zhǎng)骂蓖,則需要配置下MYSQL,在mysql命令下運(yùn)行:set? global max_allowed_packet = 2*1024*1024*10?
$structinfo =[]; //查詢(xún)的數(shù)組
$data =[];? //需要插入的數(shù)據(jù)組合成數(shù)組
foreach ($structInfo?as $k => $v){
? ? $data[$k]['company_k']? ? ? ? ? ? ? ? ?= $v['company_k'];
? ? $data[$k]['company_name']? ? ? ? ? = $v['company_name'];
? ? $data[$k]['dept_k']? ? ? ? ? ? ? ? ? ? ? ? ?= $v['dept_k'];
? ? $data[$k]['dept_name']? ? ? ? ? ? ? ? ? = $v['dept_name'];
? ? $data[$k]['one_lead_code']? ? ? ? ? ?= $v['one_lead_code'];
? ? $data[$k]['one_lead_realname']? ? ? = $v['one_lead_realname'];
? ? $data[$k]['two_lead_code']? ? ? ? ? ? ? = $v['two_lead_code'];
? ? $data[$k]['two_lead_realname']? ? ? ? = trim($v['two_lead_realname']);
? ? $data[$k]['company_admin_code']? ? = $v['company_admin_code'];
? ? $data[$k]['company_admin_realname']= $v['company_admin_realname'];
? ? $data[$k]['user_code']? = $v['user_code'];
? ? $data[$k]['realname']? = $v['realname'];
? ? $data[$k]['job_name']? = $v['job_name'];
? ? $data[$k]['user_level']= $v['level'];
? ? $data[$k]['in_date']? ? = $v['in_date'];
}
var_dump(array_keys($data[0]));
$fildString = "". implode(',',array_keys($data[0]))."";? //要插入的表里的字段
$sql = "INSERT INTO `lzh_score_template`($fildString)VALUE ";
$string =? "'" .join("','",$data[0])."'";
//join函數(shù)是implode函數(shù)的別名? 把數(shù)組元素分割為字符串implode(separator,array)separator規(guī)定數(shù)組元素之間放置的內(nèi)容
foreach ($dataas $k => $v){
? ? $sql .= "('" .join("','",$v)."'),";? //以','分割字符串,然后在在兩邊拼接分號(hào)'',這樣元素值就以分號(hào)分割了
}
$sql = substr($sql,0,strlen($sql)-1);