成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

數(shù)據(jù)庫(kù) MySQL
日常學(xué)習(xí)和工作中,經(jīng)常會(huì)遇到導(dǎo)數(shù)據(jù)的需求。比如數(shù)據(jù)遷移、數(shù)據(jù)恢復(fù)、新建從庫(kù)等,這些操作可能都會(huì)涉及大量數(shù)據(jù)的導(dǎo)入。有時(shí)候?qū)脒M(jìn)度慢,電腦風(fēng)扇狂轉(zhuǎn)真的很讓人崩潰,其實(shí)有些小技巧是可以讓導(dǎo)入更快速的,本篇文章筆者會(huì)談一談如何快速的導(dǎo)入數(shù)據(jù)。

前言:

日常學(xué)習(xí)和工作中,經(jīng)常會(huì)遇到導(dǎo)數(shù)據(jù)的需求。比如數(shù)據(jù)遷移、數(shù)據(jù)恢復(fù)、新建從庫(kù)等,這些操作可能都會(huì)涉及大量數(shù)據(jù)的導(dǎo)入。有時(shí)候?qū)脒M(jìn)度慢,電腦風(fēng)扇狂轉(zhuǎn)真的很讓人崩潰,其實(shí)有些小技巧是可以讓導(dǎo)入更快速的,本篇文章筆者會(huì)談一談如何快速的導(dǎo)入數(shù)據(jù)。

注:本篇文章只討論如何快速導(dǎo)入由邏輯備份產(chǎn)生的SQL腳本,其他文件形式暫不討論。

1.盡量減小導(dǎo)入文件大小

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

  1. # 導(dǎo)出整個(gè)實(shí)例 
  2. mysqldump -uroot -pxxxxxx --all-databases > all_database.sql 
  3.  
  4. # 導(dǎo)出指定庫(kù) 
  5. mysqldump -uroot -pxxxxxx --databases testdb > testdb.sql 
  6.  
  7. # 導(dǎo)出指定表 
  8. mysqldump -uroot -pxxxxxx testdb test_tb > test_tb.sql  
  9.  
  10. # 導(dǎo)入指定SQL文件 (指定導(dǎo)入testdb庫(kù)中) 
  11. mysql -uroot -pxxxxxx testdb < testdb.sql 

導(dǎo)入的SQL腳本內(nèi)容大多是先建庫(kù)建表,然后插入數(shù)據(jù),其中耗時(shí)最長(zhǎng)的應(yīng)該是insert插入數(shù)據(jù)了。為了減小文件大小,推薦使用擴(kuò)展插入方法,即多行一起批量insert,類似這樣:insert into table_name values (),(),(),...,(); 。使用擴(kuò)展插入比一條條插入,文件大小要小很多,插入速度要快好幾倍。使用mysqldump導(dǎo)出的文件默認(rèn)是使用批量插入的方法,導(dǎo)出時(shí)可使用--skip-extended-insert 參數(shù)改為逐條插入。下面以一張一千萬的數(shù)據(jù)表為例,測(cè)試下不同方式導(dǎo)出的文件插入時(shí)的速度。

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

截圖

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

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

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

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

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

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

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

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

  1. # 1.進(jìn)入MySQL命令行 臨時(shí)修改這兩個(gè)參數(shù) 
  2. set global innodb_flush_log_at_trx_commit = 2; 
  3. set global sync_binlog = 2000; 
  4.  
  5. # 2.執(zhí)行SQL腳本導(dǎo)入 
  6. mysql -uroot -pxxxxxx testdb < testdb.sql 
  7.  
  8. # 3.導(dǎo)入完成 再把參數(shù)改回來 
  9. set global innodb_flush_log_at_trx_commit = 1; 
  10. set global sync_binlog = 1; 

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

總結(jié):

本篇文章主要介紹快速導(dǎo)入數(shù)據(jù)的方法,可能還有其他方法快速導(dǎo)入數(shù)據(jù),比如load data或者寫程序多線程插入。本文中介紹的方法只適合手動(dòng)導(dǎo)入SQL腳本,下面總結(jié)下本文中提到的方法。

  1. 使用MySQL自帶的命令行工具進(jìn)行導(dǎo)出導(dǎo)入。
  2. 使用擴(kuò)展插入方法,一個(gè)insert對(duì)于多個(gè)值。
  3. 臨時(shí)修改innodb_flush_log_at_trx_commit和sync_binlog參數(shù)。
  4. 關(guān)閉binlog或者臨時(shí)不記錄binlog。

其實(shí)還有一些其他方案,比如先不創(chuàng)建索引,插入數(shù)據(jù)后再執(zhí)行添加索引操作;或者先將表改為MyISAM或MEMORY引擎,導(dǎo)入完成后再改為InnoDB引擎。不過這兩種方法實(shí)施起來較為麻煩且不知效果如何。以上方法只是筆者依據(jù)個(gè)人經(jīng)驗(yàn)總結(jié)得出,可能不太全面,歡迎各位補(bǔ)充哦。 

 

責(zé)任編輯:龐桂玉 來源: 今日頭條
相關(guān)推薦

2024-07-04 13:42:12

2025-05-12 01:55:00

MySQL存儲(chǔ)數(shù)據(jù)

2025-06-26 08:22:03

2024-04-15 08:30:53

MySQLORM框架

2021-04-08 10:55:53

MySQL數(shù)據(jù)庫(kù)代碼

2010-06-12 10:22:15

MySQL插入數(shù)據(jù)

2017-11-22 15:33:56

MySQL快速插入語句優(yōu)化

2011-08-16 09:21:30

MySQL大數(shù)據(jù)量快速語句優(yōu)化

2017-05-31 16:10:45

MySQL誤操作恢復(fù)數(shù)據(jù)

2018-09-13 15:20:24

數(shù)據(jù)庫(kù)MySQLSQL

2011-08-04 18:00:47

SQLite數(shù)據(jù)庫(kù)批量數(shù)據(jù)

2010-05-18 14:04:51

MySQL語句

2010-11-22 16:05:53

MySQL多表插入

2010-06-10 17:29:52

MySQL插入數(shù)據(jù)

2025-01-08 12:36:52

2022-05-18 08:25:59

MySQLutf8字符集數(shù)據(jù)庫(kù)

2021-09-14 13:15:43

MySQL數(shù)據(jù)庫(kù)腳本

2021-06-28 10:25:47

MySQL數(shù)據(jù)庫(kù)重復(fù)數(shù)據(jù)

2020-09-18 10:18:08

MySQL數(shù)據(jù)插入數(shù)據(jù)庫(kù)

2020-08-27 07:29:01

MySQL數(shù)據(jù)數(shù)據(jù)表
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 九九久久国产精品 | 亚洲欧美网| 日韩欧美综合 | 欧美精品网 | 欧美一级三级在线观看 | 久久精品99 | 久久99网站| 欧美影院久久 | 亚洲性在线| 成人精品一区 | 可以免费观看的av片 | 一区精品在线观看 | 亚洲国产精品日本 | 亚洲综合在线一区 | 中文字幕在线观看一区二区 | 国产精品久久久久久久久动漫 | 成年精品 | 国产精品视频不卡 | 欧美自拍另类 | 久久久久久毛片免费观看 | 国产探花在线精品一区二区 | 一区二区三区免费在线观看 | 精品国产一区二区国模嫣然 | 亚洲精品久久久一区二区三区 | 一区二区三区在线观看免费视频 | 成年免费在线观看 | 五月天激情综合网 | 一级黄色裸片 | 天天射天天操天天干 | 美女在线观看av | 精品一区二区三区在线观看国产 | 一区二区三区小视频 | 日日夜夜精品免费视频 | 成人精品一区二区三区中文字幕 | av网站在线免费观看 | 一道本不卡视频 | 精品欧美一区二区精品久久久 | 久久y| 色综合成人网 | 一级片在线观看 | 欧美激情国产精品 |