久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL中怎么實現快速插入數據

137次閱讀
沒有評論

共計 2035 個字符,預計需要花費 6 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

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

MySQL 如何快速插入數據

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

首先給個建議,導出導入數據盡量使用 MySQL 自帶的命令行工具,不要使用 Navicat、workbench 等圖形化工具。特別是大數據量的時候,用 MySQL 自帶的命令行工具導出和導入比用 Navicat 等圖形化工具要快數倍,而且用 Navicat 等圖形化工具做大數據量的操作時很容易卡死。下面簡單介紹下怎么用 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 腳本內容大多是先建庫建表,然后插入數據,其中耗時最長的應該是 insert 插入數據了。為了減小文件大小,推薦使用擴展插入方法,即多行一起批量 insert,類似這樣:insertintotable_namevalues(),(),(),…,();。使用擴展插入比一條條插入,文件大小要小很多,插入速度要快好幾倍。使用 mysqldump 導出的文件默認是使用批量插入的方法,導出時可使用 –skip-extended-insert 參數改為逐條插入。

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

2. 嘗試修改參數加快導入速度

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

innodb_flush_log_at_trx_commit 默認值為 1,可設置為 0、1、2

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

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

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

MySQL 如何快速插入數據

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

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

setglobalinnodb_flush_log_at_trx_commit=2;

setglobalsync_binlog=2000;

#2. 執行 SQL 腳本導入

mysql-uroot-pxxxxxxtestdb

#3. 導入完成再把參數改回來

setglobalinnodb_flush_log_at_trx_commit=1;

setglobalsync_binlog=1;

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

關于 MySQL 中怎么實現快速插入數據問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注丸趣 TV 行業資訊頻道了解更多相關知識。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計2035字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 和平区| 新余市| 南平市| 巴彦县| 西和县| 玉屏| 达拉特旗| 固始县| 佳木斯市| 澳门| 珠海市| 金湖县| 贞丰县| 庆元县| 西藏| 宜君县| 南乐县| 汕头市| 霍邱县| 广宗县| 伊宁市| 临江市| 邢台市| 广南县| 成安县| 定日县| 云和县| 从化市| 安龙县| 施甸县| 温泉县| 临泽县| 武功县| 镶黄旗| 大港区| 务川| 黑水县| 丹江口市| 永泰县| 辽阳市| 隆子县|