簡體   English   中英

執行100k插入語句的最佳方法是什么?

[英]What is the best way to execute 100k insert statements?

我創建了一組100k插入查詢,以在多個oracle表中生成數據以進行性能測試。 執行此操作的最佳方法是什么?

過去,我嘗試過Oracle SQL Developer和Toad之類的工具。 但是,不確定是否可以處理這么大的體積。

簡單的插入語句,例如-

INSERT INTO SELLING_CODE (SELC_ID, VALC_ID, PROD_ID, SELC_CODE, SELC_MASK, VALC_ID_STATUS) 
VALUES (5000001, 63, 1, '91111111', 'N/A', 107);

使用SQL語句插入100,000行是可以的 它不是大量的數據,並且有一些簡單的技巧可以幫助您將運行時間縮短到幾秒鍾。

首先,請確保您的工具沒有為每個語句顯示內容。 將語句復制並粘貼到工作表窗口中將非常慢。 但是將語句保存到SQL * Plus腳本中,然后運行該腳本會很快。 如果可能,請使用真實的SQL * Plus客戶端。 該程序幾乎可以在所有系統上使用,並且擅長運行小型腳本。

如果必須使用SQL Developer,則將100K語句保存在文本文件中,然后將其作為腳本運行(F5)。 此方法在我的PC上花費了45秒。

set feedback off
@C:\temp\test1.sql

其次,批處理SQL語句以消除開銷。 您不必全部批處理,一次批處理100條語句就足以減少99%的開銷。 例如,生成這樣的一千條語句:

INSERT INTO SELLING_CODE (SELC_ID, VALC_ID, PROD_ID, SELC_CODE, SELC_MASK, VALC_ID_STATUS)
select 5000001, 63, 1, '91111111', 'N/A', 107 from dual union all
select 5000001, 63, 1, '91111111', 'N/A', 107 from dual union all
...
select 5000001, 63, 1, '91111111', 'N/A', 107 from dual;

將其保存在文本文件中,然后在SQL Developer(F5)中以相同的方式運行。 此方法在我的PC上花費了4秒鍾。

set feedback off
@C:\temp\test1.sql

如果您不能顯着更改INSERT語句的格式,則只需添加BEGINEND; / END; /每100行之間。 它將一次向服務器傳遞100條語句,並顯着減少了網絡開銷。

為了獲得更快的速度,請在常規SQL * Plus中運行腳本。 在我的PC上,加載100,000行只需2秒。

對於這樣的中型數據,保持SQL語句的便利性很有幫助。 通過一些技巧,您可以獲得與二進制格式幾乎相同的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM