如何快速的將已知的1000萬條數據插入到數據庫中


首先,可以定義1個1000萬次的循環,每次循環插入1條數據,當1000萬次循環全部執行結束,則插入完成!

也可以使用1條INSERT語句插入多條數據,例如:

INSERT INTO t_user (username, password, age, phone, email) VALUES
('user01', 'password01', 11, '13800138001', 'user01@qq.com'),
('user02', 'password02', 12, '13800138002', 'user02@qq.com'),
('user03', 'password03', 13, '13800138003', 'user03@qq.com'),
('user04', 'password04', 14, '13800138004', 'user04@qq.com'),
('user05', 'password05', 15, '13800138005', 'user05@qq.com'),
('user06', 'password06', 16, '13800138006', 'user06@qq.com'),
('user07', 'password07', 17, '13800138007', 'user07@qq.com'),
('user08', 'password08', 18, '13800138008', 'user08@qq.com'),
('user09', 'password09', 19, '13800138009', 'user09@qq.com'),
('user10', 'password10', 20, '13800138010', 'user10@qq.com'),
('user11', 'password11', 21, '13800138011', 'user11@qq.com'),
('user12', 'password12', 22, '13800138012', 'user12@qq.com'),
('user13', 'password13', 23, '13800138013', 'user13@qq.com'),
('user14', 'password14', 24, '13800138014', 'user14@qq.com'),
('user15', 'password15', 25, '13800138015', 'user15@qq.com'),
('user16', 'password16', 26, '13800138016', 'user16@qq.com'),
('user17', 'password17', 27, '13800138017', 'user17@qq.com'),
('user18', 'password18', 28, '13800138018', 'user18@qq.com'),
('user19', 'password19', 29, '13800138019', 'user19@qq.com'),
('user20', 'password20', 30, '13800138020', 'user20@qq.com');

所以,可以將1000萬條數據嘗試以上的拼接再來執行,但是,由於拼接過長的SQL語句字符串會導致拼接時的效率非常低,所以,不可以使用1個字符串拼出1次插入太多數據的!可行的解決方案可以是:例如使用1條SQL語句插入1000條數據,並且把這樣的做法循環1萬次,就可以解決這個問題!

另外,還可以通過批處理解決性能問題,其核心是一次性向MySQL發送多條SQL指令,但並不直接執行,而是當發送到一定數量或滿足一次條件后,再由MySQL執行多條SQL指令。

由程序將SQL指令發送到MySQL,並執行,其執行效率存在的問題可能有:

  1. 程序可能是運行在應用服務器上的,例如運行在Tomcat服務器上,而MySQL可能是專門的服務器,即程序和MySQL並不在同一台服務器上,每次需要執行SQL指令時,首先需要建立與MySQL服務器的連接,才可以將SQL指令傳送到MySQL服務器,甚至,即使使用的是同一台服務器,這個連接、傳送的過程依然是存在的!通過批處理的做法可以進行優化,即:只用建立1次連接,就可以傳送100甚至1000甚至更多條SQL語句,從而大大的減少連接次數!

  2. 當SQL指令送達MySQL服務器后,在執行之前,還必須經過編譯、解釋、詞法分析、語義分析等過程,才可以被執行!所以,如果使用1條SQL語句插入10條數據,肯定比循環10次卻每次插入1條數據的效率要高得多!

所以,如果是1000萬次的循環,每次插入1條數據,問題就出在:需要建立1000萬次連接MySQL的過程,並需要在執行之前檢查1000萬條SQL指令!

解決方案中的第1點肯定是使用批處理的做法,減少連接次數!第2點就是使用同1條SQL指令插入多條數據,則可以減少編譯、分析的次數!所以,最終的解決方案可以是循環100次,每次都是1個批處理,每個批處理中發送100條SQL指令,每個SQL指令插入1000條數據。


免責聲明!

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



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