欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

MySQL中怎么實現(xiàn)快速插入數(shù)據(jù)-創(chuàng)新互聯(lián)

MySQL中怎么實現(xiàn)快速插入數(shù)據(jù),針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

成都創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)按需設(shè)計,是成都網(wǎng)站開發(fā)公司,為成都木包裝箱提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站制作熱線:028-86922220

MySQL如何快速插入數(shù)據(jù)

1.盡量減小導入文件大小

首先給個建議,導出導入數(shù)據(jù)盡量使用MySQL自帶的命令行工具,不要使用Navicat、workbench等圖形化工具。特別是大數(shù)據(jù)量的時候,用MySQL自帶的命令行工具導出和導入比用Navicat等圖形化工具要快數(shù)倍,而且用Navicat等圖形化工具做大數(shù)據(jù)量的操作時很容易卡死。下面簡單介紹下怎么用MySQL自帶的命令行工具做導入導出。

#導出整個實例

mysqldump-uroot-pxxxxxx--all-databases>all_database.sql

#導出指定庫

mysqldump-uroot-pxxxxxx--databasestestdb>testdb.sql

#導出指定表

mysqldump-uroot-pxxxxxxtestdbtest_tb>test_tb.sql

#導入指定SQL文件(指定導入testdb庫中)

mysql-uroot-pxxxxxxtestdb

導入的SQL腳本內(nèi)容大多是先建庫建表,然后插入數(shù)據(jù),其中耗時最長的應該是insert插入數(shù)據(jù)了。為了減小文件大小,推薦使用擴展插入方法,即多行一起批量insert,類似這樣:insertintotable_namevalues(),(),(),...,();。使用擴展插入比一條條插入,文件大小要小很多,插入速度要快好幾倍。使用mysqldump導出的文件默認是使用批量插入的方法,導出時可使用--skip-extended-insert參數(shù)改為逐條插入。

可以看出,使用擴展插入的SQL腳本導入大概需要10分鐘左右,而一條條插入的SQL腳本導入時間過長,大概1個小時仍然沒有導完,一個2個多G的文本導入一個多小時仍未結(jié)束,等不及的筆者就手動取消了不過還是可以看出多條一起insert比一條條插入數(shù)據(jù)要節(jié)省數(shù)倍的時間。

2.嘗試修改參數(shù)加快導入速度

在MySQL中,有一對大名鼎鼎的“雙一”參數(shù),即innodb_flush_log_at_trx_commit與sync_binlog。為了安全性這兩個參數(shù)默認值為1,為了快速導入腳本,我們可以臨時修改下這兩個參數(shù),下面簡單介紹下這兩個參數(shù):

innodb_flush_log_at_trx_commit默認值為1,可設(shè)置為0、1、2

如果innodb_flush_log_at_trx_commit設(shè)置為0,logbuffer將每秒一次地寫入logfile中,并且logfile的flush(刷到磁盤)操作同時進行.該模式下,在事務(wù)提交的時候,不會主動觸發(fā)寫入磁盤的操作。如果innodb_flush_log_at_trx_commit設(shè)置為1,每次事務(wù)提交時MySQL都會把logbuffer的數(shù)據(jù)寫入logfile,并且flush(刷到磁盤)中去.如果innodb_flush_log_at_trx_commit設(shè)置為2,每次事務(wù)提交時MySQL都會把logbuffer的數(shù)據(jù)寫入logfile.但是flush(刷到磁盤)操作并不會同時進行。該模式下,MySQL會每秒執(zhí)行一次flush(刷到磁盤)操作。

sync_binlog默認值為1,可設(shè)置為[0,N)

當sync_binlog=0,像操作系統(tǒng)刷其他文件的機制一樣,MySQL不會同步到磁盤中去而是依賴操作系統(tǒng)來刷新binarylog。當sync_binlog=N(N>0),MySQL在每寫N次二進制日志binarylog時,會使用fdatasync()函數(shù)將它的寫二進制日志binarylog同步到磁盤中去。

MySQL如何快速插入數(shù)據(jù)

這兩個參數(shù)可以在線修改,若想快速導入,可以按照下面步驟來操作:

#1.進入MySQL命令行臨時修改這兩個參數(shù)

setglobalinnodb_flush_log_at_trx_commit=2;

setglobalsync_binlog=2000;

#2.執(zhí)行SQL腳本導入

mysql-uroot-pxxxxxxtestdb

#3.導入完成再把參數(shù)改回來

setglobalinnodb_flush_log_at_trx_commit=1;

setglobalsync_binlog=1;

還有另外一種場景是你的需求是新建從庫,或者是不需要產(chǎn)生binlog,這時候?qū)隨QL腳本時可以設(shè)置暫時不記錄binlog,可以在腳本開頭增加setsql_log_bin=0;然后再執(zhí)行導入,這樣速度會進一步加快。如果你的MySQL實例沒有開啟binlog則不需要再執(zhí)行該語句了。

關(guān)于MySQL中怎么實現(xiàn)快速插入數(shù)據(jù)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


本文標題:MySQL中怎么實現(xiàn)快速插入數(shù)據(jù)-創(chuàng)新互聯(lián)
文章URL:http://chinadenli.net/article48/dgihhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT定制網(wǎng)站網(wǎng)站內(nèi)鏈微信公眾號定制開發(fā)外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名