1,一條sql語句插入多條數據的寫法
在執行SQL語句的時候,插入多行insert語句,效率寫法 insert into table(name,age) values('小米',1) ,('小明',1) ,('小張',1) 最多能插入999行記錄
修改后的插入操作能夠提高程序的插入效率。這里第二種SQL執行效率高的主要原因是合並后日志量(MySQL的binlog和innodb的事務讓日志)減少了,降低日志刷盤的數據量和頻率,從而提高效率。通過合並SQL語句,同時也能減少SQL語句解析的次數,減少網絡傳輸的IO。
這里提供一些測試對比數據,分別是進行單條數據的導入與轉化成一條SQL語句進行導入,分別測試1百、1千、1萬條數據記錄。
2.事務中的插入處理
就像這樣:
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;
使用事務可以提高數據的插入效率,這是因為進行一個INSERT操作時,MySQL內部會建立一個事務,在事務內才進行真正插入處理操作。通過使用事務可以減少創建事務的消耗,所有插入都在執行后才進行提交操作
。
這里也提供了測試對比,分別是不使用事務與使用事務在記錄數為1百、1千、1萬的情況。
兩者搭配使用,效果不錯。還有一個按照主鍵順序插入的那個效果不咋地就不說了。注意:
SQL語句是有長度限制,在進行數據合並在同一SQL中務必不能超過SQL長度限制,通過max_allowed_packet配置可以修改,默認是1M,測試時修改為8M。
事務需要控制大小,事務太大可能會影響執行的效率。MySQL有innodb_log_buffer_size配置項,超過這個值會把innodb的數據刷到磁盤中,這時,效率會有所下降。所以比較好的做法是,在數據達到這個這個值前進行事務提交。
參考鏈接:
https://blog.csdn.net/qq_22855325/article/details/76087138