sql insert語句提高效率的方法


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM