2016-01-13 74 views
0

我已經讀取了存儲大量數據的SQL Server數據庫。每天晚上,我從該數據庫的表格中抽取約一百萬行左右的行,並將其放在本地機器上的MySQL數據庫中,然後在那裏對數據執行分析。我目前複製這些數據的方法基本上是一個Perl腳本:將大量數據從SQL Server複製到MySQL

(1) Connect to MySQL database 
(2) Drop old table 
(3) Create table. 
(4) Get data from SQL Server DB. 
(5) Put data on MySQL database using the following method: 
while (@data = $sth->fetchrow_array()) { 
    $id = $data[0]; 
    $at = $data[1]; 
    $ar = $data[2]; 
    $dt = $data[3]; 
    $v = $data[4]; 
    $di = $data[5]; 
    #PUSH ONTO MYSQL 
    $dbh2->do("INSERT INTO datatable VALUES (?, ?, ?, ?, ?, ?)", 
      undef, $id, $at, $ar, $dt, $v, $di); 
} 

這很慢。考慮到我在遠程SQL服務器上的有限權限,是否有一種方法可以更快地複製這些數據? (有人建議創建一個鏈接的服務器,但我不認爲沒有遠程服務器上的更多管理角色就可以了)。將來我可能需要處理更大的數據集,因此找出更快的方法將是理想的。

值得注意的是:我每天晚上從遠程服務器複製整個日期範圍,即使它在技術上只是更新了最近一天的數據。但是,以前的某些數據有可能在之後發生變化,這就是爲什麼我們認爲每次只複製整個事物的謹慎原因。這顯然是使其變慢的一部分。有沒有辦法每晚只複製更改?

FYI我的工作機器運行的是Windows 7,我使用MySQL 5.7

+1

如何使用'bcp'將數據寫入文本文件並使用'load data infile'加載它? –

+0

如果格式足夠簡單,考慮轉儲到csv,您可以將它們快速導入到mysql中。對於像這樣的批量導入,您可能需要考慮在加載時禁用索引,因爲您執行的每個插入操作都會導致索引更新。對於數百萬條記錄來說,這是很大的開銷。更好地批量加載,並在一次後重建。 –

+1

絕對最好的方法是使用每個數據庫服務器的本地批量導出/導入工具。 –

回答

1

根據dev.mysql.com LOAD DATA INFILE比INSERT快約20倍。這意味着使用Perl腳本寫入文本文件以及使用該信息執行LOAD DATA INFILE的速度要快得多。

相關問題