最近在研究mysql的時候,遇到了mysql批量插入、批量更新效率不高的問題,之前一直在用sqlserver,mysql本身效率還是不錯的,這里把提升效率方法記錄下,就不對比時間了,實際測試結果效率提升很多。
創建表結構
1?DROP?TABLE?IF?EXISTS?`b_student`; 2?CREATE?TABLE?`b_student`?( 3???`id`?int(11)?NOT?NULL?AUTO_INCREMENT, 4???`examcode`?varchar(20)?CHARACTER?SET?gbk?NOT?NULL?DEFAULT?'', 5???`stucode`?varchar(20)?CHARACTER?SET?gbk?NOT?NULL?DEFAULT?'', 6???`name`?varchar(20)?CHARACTER?SET?gbk?NOT?NULL?DEFAULT?'', 7???PRIMARY?KEY?(`id`) 8?)?ENGINE=InnoDB?AUTO_INCREMENT=1?DEFAULT?CHARSET=utf8;
?
查詢優化,場景是判斷examcode是否存在
SELECT?1?FROM?b_student?WHERE?examcode='10001'??limit?1;
查詢結果1表示存在,結果null表示不存在
?
批量插入優化,場景批量插入學生信息
INSERT?INTO?`b_student`?(`examcode`,`stucode`,`name`)?VALUES('10001','10001','張三'),('10002','10002','李四');
?
批量更新優化,場景批量更新學生信息
批量插入這里介紹兩種方法(要求表有主鍵),還有其他的方式。
1、replace into方法,根據主鍵更新某列或某幾列,注意:這種方式會把除id和name之外的列清空。
replace into b_student (id,name) values (1,'張三豐'),(2,'李思思');
2、insert into …on duplicate key update 方法,根據主鍵更新update后定義的列
insert?into?b_student?(id,stucode)?values?(1,'20001'),(2,'20002')?on?duplicate?key?update?stucode=values(stucode);
以上兩種方法在批量更新時效率非常高,根據實際情況進行選擇。
?以上就是MySQL 查詢 批量插入 批量更新 優化的詳情介紹的內容,更多相關內容請關注PHP中文網(www.php.cn)!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END