我試圖使用德爾福2007年批從TADOTable將數據移動到MySQL的TMyTable
程序從傳統數據庫通過ODBC獲取數據的舊數據庫(MS Access)與MySQL服務器使用CRBatchMove導入表連接並使用TADOTable.SaveToFile()將其存儲在本地硬盤上。程序的第二部分將該文件讀入另一個TADOTable,並使用TCRBatchMove將其轉移到MySQL服務器(通過DevArt的TMyTable)。在這個過程中,出於某種原因,批量移動看起來非常慢。
以下試驗中的數據量約爲100,000條記錄,每條記錄約有120個字段。大多數字段是整數和VARCHAR(每個VARCHAR少於32個字符)。
我所獲得的性能數據是:
Time taken to bring data to local file over ODBC connection: 17 seconds
Time taken to load data from local file into TADOTable: 3 seconds
Time taken by TCRBatchMove to move data from TADOTable to TMyTable: > 30 minutes
MySQL服務器的開發機器上本地運行(這是一個i7-2.8GHz)和數據庫,否則是非常快)。
爲什麼批量移動將數據推送到MySQL服務器的速度如此之慢。有沒有辦法加快這項任務?還是有更好的方法來完成這個?
硬盤沒有看到代碼的說。這可能與您在TMyTable中隨後在MySQL中插入數據的方式有關,例如,如果這在每個行上觸發MySQL上的索引更新。 –
您使用的是交易嗎?它可能會加速插入。 –
MySQL有一個名爲'load data infile'的函數,請參閱:http://dev.mysql.com/doc/refman/5.1/en/load-data.html您可以使用它來儘可能快地插入數據。這將爲您提供插入MySQL時間的基準,並讓您確定延遲是在MySQL還是Delphi中。如果您有TMyTable的源代碼,則也可以使用分析器。 – Johan