mysql数据转储方法_Mysql数据库各种导出导入数据方式的区别(我的理解错误还望指正)...
mysqldump,NAVICAT轉儲,select * outfile在千級數據,萬級,百萬級數據下的表現。
千級數據
mysqldump導出sql文件
導出是出了拒絕訪問的錯誤;為對應目錄(.sql文件要保存的目錄)的對應用戶添加(正在使用的用戶)添加寫入權限即可。
mysqldump -h localhost ?-u root -p123456 --database financial_bak --table sx_financial_bak?>d:\dump.sql
注:-p 與密碼間不能有空格,有空格時’123456’會被作為數據庫名解析,并且要求輸入密碼。
可知--database可以省略,--table也可以省略
.sql文件會給出所導出的數據來源,包括數據連接,服務器地址,端口號,導出時間等信息。文件主體有:創建數據庫判斷語句-刪除表-創建表(-鎖表-禁用索引)-插入數據(-啟用索引-解鎖表)。
用時大約為1s!!其中包括兩次時間函數的調用。導出的dump.sql為23k,一共包含1909條insert語句。
2.使用navicat
同樣的表使用navicat的sql導出功能用時約為0.1s
3.使用select* ?outfile的方式
其中使用默認參數對所得數據劃分的方式所花時間為0.0016s,使用自定義劃分方式用時0.0257s,遠遠小于使用mysqldump,以及navicat導出sql的方式。
萬級數據量
對于輕量的表來說結果是outfile的方式用時最少。對于另一個較大的表呢?t_Financial_bak有35007條數據且每條數據有較多數據項
Mysqldump
用時為1.5s。10倍的數據量僅僅多花費了50%的時間,說明在上面的結果1s中時間函數占比較大。
navicat轉儲sql的方式
用時大幅度上漲,由0.1變為了3.6s。轉儲文件由0.1m增加為27m用時的上漲比數據量上漲更快。
3.Select * outfile的方式
可以看到使用默認文件分割方式的outfile語句的時間為0.36,比使用自定義分割方式的0.38少了0.02s可以初步推斷使用自定義分割方式要比默認方式多花0.02秒。但使用select
* outfile的方式依然比使用其他兩種方式導出所花時間少一個數量級。
百萬級數據
對于更大的表有7925794條數據financial的測試結果
Mysqldump
用時187.08s
Navicat轉儲sql
用時750.635s
Outfile
默認分隔符花費時間94.54s
自定義分隔符花費106.41s
對于導出文件差異的分析總結。
導出方式
文件類型
具體內容
時間花費以及評議
Mysqldump
.sql
創建數據庫判斷語句-刪除表-創建表-插入數據。插入方式為一次性插入所有數據,每一行是一個元組。
需要編寫語句,但是隨著數據量增加對navicat
Navicat轉儲sql
整體內容與mysqldump一致,插入實現方式不同,對每一行數據都執行一個insert語句。
最初花費時間很少,操作容易,不需要編寫語句花費額外時間。但隨著數據量的增長很快,適合導出數據量較小的主要功能為對照的表。
outfile
文本文件
導出數據為數據元組的簡單分割。
花費時間最少,但是導出服務器數據時不方便。
對于三種方式的比較:
Mysqldump,navicat轉儲都是將表導出為sql:
優點
導出了表結構,恢復起來更加方便。
導出數據具有很強可讀性,可以很方便的對個別數據進行查找,修改。
Navicat轉儲只需要鼠標點擊即可完成具體到表導出任務,操作非常容易(但花時間也最多!)。
Mysqldump提供很多可選參數可以根據需求使用不同的參數,靈活多變,可以遠程備份文件到本地。
缺點
.sql文件高度結構化,不利于對數據的大規模修改處理。
導出大量數據時,時間比較常,導入時時間更長!
Outfile方式:
優點
導出速度相對快。
導出數據結構化程度低,可以將文件導入到不同的數據庫表中。
導出數據為文本格式,必要時方便對數據進行格式化等修改。
導出時要求沒有同名文件,更加安全。
缺點
導出時要求文件不能同名,但不提供是否覆蓋的選項。(dump方式由shell提供)
導出數據不包括表結構,導入時要求已經有一個表可以存放數據。
三種方式導出文件的導入
Mysqldump導出文件導入source
導入35007條數據花費的時間5s(不知為何source命令后show profiles顯示的是sql中每一個sql的花費時間,占時不知道使用profiles查看source總用時的方法,以下為timestampdiff()的結果,由于mysql版本問題只能精確到秒)
Navicat轉儲sql文件導入
實在沒有耐心等下去了,一共導入; 7675條數據,花費時間275.05s,可見這種方式導出百萬級的表時就幾乎已經是不可用的了。
Outfile導出文件的導入infile
使用默認分割方式導出的文件,導入35007行用時2.67s
使用自定義的數據分割方式,導入35007行用時3.38s
總結:
Mysqldump 在導出導入都有不錯的表現,且隨著數據量的增加,導出導入每條數據所用時間在減少(與其導出.sql文件的結構有關,說明insert語句一次插入多條數據,比執行多天語句每條插入一條數據的效率高的多),而且提供較多的option,可以幫助用戶實現各種需求,在服務器數據備份上由于-h參數也outfile-infile的方式更加方便。
Navicat提供的導出導入方式操作方便,但是隨著數據量的很快變得幾乎不可用。到導出的.sql文件結構化程度最高,易于做文本處理,對于及幾百行,千行的對照表來說不失為一種簡單易行的數據導出方式。
Outfile—infile導出的文件是一個數據元組安一定規則排列的文件,導出的數據文件比同等數據量的.sql文件更小。導出導入花費的時間也更短適合用來保存備份。但是要求恢復數據時表已經存在。
附:不同環境下操作時間的測量(占時沒有找到更好的方法)
windos命令行下:
使用time命令打印時間的方式來實現(中間有調用時間函數的時間,以及io時間,操作用時較少時及其不準):
編寫.bat批處理文件
time
mysql -h localhost -u root -p123456 --database financial_bak
source d:\dump.sql
time
pause
注意pause讓命令行界面滯留。enter.txt是一個自建的只包含一個換行的文件(time會接受一個額外的參數修改時間,需要換行跳過)。
mysql命令行
使用profile
set profiling=1;
source d:\dump.sql;
show profiles;
mysql命令行的timestampdiff()計算時間差的方式
5.6以下版本僅支持到秒級,精度較差
set @d=now();
Source D:\\t_dump.sql;
select timestampdiff(second,@d,now());
注意由于時間算時間差要求三條命令一氣呵成。最后一條命令下有一個空行!
timestampdiff OPTION
FRAC_SECOND。表示間隔是毫秒
SECOND。秒
MINUTE。分鐘
HOUR。小時
DAY。天
WEEK。星期
MONTH。月
QUARTER。季度
YEAR。年
總結
以上是生活随笔為你收集整理的mysql数据转储方法_Mysql数据库各种导出导入数据方式的区别(我的理解错误还望指正)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7 年老显卡 GTX 1080 能跑,图
- 下一篇: mycli mysql_MyCLI :易