2009-11-19 77 views
4

用10萬行填充數據庫表的最快方法是什麼?我正在詢問這種技術,但也想了解任何特定的數據庫引擎,以便儘可能快地實現這一點。我「米不要求這個數據這個初始數據表人口中建立索引。用10萬行填充數據庫表的最快方法

+0

您能詳細說明您嘗試填充數據庫的數據的性質嗎?如果是垃圾數據,只需在服務器上運行功能來插入虛擬行。如果數據被困在文件中,請考慮供應商特定的批量導入/ bcp工具。 – 2009-11-19 22:42:23

+0

我現在所擁有的:Firebird數據庫,爲了測試目的想要填充數據。 – luvieere 2009-11-19 23:06:10

回答

7

使用SQL將大量數據加載到數據庫通常會導致較差的性能。爲了快速完成任務,您需要繞過SQL引擎。大多數數據庫(包括我認爲的Firebird)都能夠將所有數據備份到文本(或可能是XML)文件中,並從這樣的轉儲文件恢復整個數據庫。由於恢復過程不需要事務感知,並且數據不表示爲SQL,因此通常非常快速。

我會寫一個手動生成轉儲文件的腳本,然後使用數據庫的恢復實用程序來加載數據。

經過一番搜索,我發現FBExport,似乎能夠做到這一點 - 你只需要生成一個CSV文件,然後使用FBExport工具將該數據導入到數據庫中。

0

使用MySQL或MS SQL和嵌入式功能,生成的數據庫引擎中的記錄,或者生成一個文本文件(像格式CVS)和然後使用批量複製功能。

2

最快方法可能是與SELECT運行的INSERT SQL語句而來。我已經生成的測試數據來填充其他數據庫中的表,甚至在同一個數據庫的次數。但這一切都取決於你自己的數據的性質和可用性。在我的情況下,我有足夠的行數據收集數據,其中有幾個選擇/插入程序隨機行選擇應用程序用巧妙的方法對真實數據進行編輯,可以快速獲得體面的測試數據。在某些情況下,表中的數據被唯一地識別我用中間表和頻率分配排序,以消除等不常見的名稱的東西(消除實例,其中通過用組計數是小於或等於2)

此外,Red Gate實際上提供一個實用程序來完成你所要求的功能。這不是免費的,我認爲這是Sql Server特有的,但他們的工具是頂尖的。這是值得的成本。還有一個免費試用期。

如果你不想支付或他們的實用程序,你可以想象建立你自己很快。他們所做的一切都不是魔術。一個體面的開發人員應該能夠在一兩天內敲出一個類似功能的Alpha /硬編碼版本的應用程序...

1

您可能對這個question的回答感興趣。它會將大量的CSV文件上傳到SQL Server(2005)數據庫。對於SQL Server,似乎SSIS DTS包是將數據批量導入數據庫的最快方式。

1

它完全取決於你的數據庫。例如,Oracle有一些名爲direct path load(http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch09.htm)的東西,它可以有效地禁用索引,並且如果我理解正確,則會構建將寫入到客戶端磁盤的二進制結構,而不是發送SQL。

結合每個分區的分區和重建索引,我們能夠以相對較短的順序加載10億行(我不小孩)數據庫。 1000萬行是沒有的。

相關問題