我們有一個可以連接到Oracle或SQL Server的Delphi應用程序。我們使用Devart組件連接到數據庫,並且在涉及數據庫訪問時,所有內容都非常通用。即我們使用最小公分母。最終,我們使用數據庫作爲數據存儲,並且不使用任何可能特定於數據庫的「高級」功能。從Delphi執行批量插入時的Oracle性能
但是,我們對Oracle有嚴重的性能問題。這與插入數據有關。我知道通過運行一系列insert語句來插入數據對於性能來說並不好,但由於在將數據上傳到數據庫之前需要對原始數據進行一些業務邏輯處理,所以我們有點侷限於多次插入。爲了瞭解性能差異,我們最近做了一個測試,在我們的數據庫中插入了1000個項目,在SQL Server中(可接受)需要5分鐘,而在Oracle中需要44分鐘。
我們可以做些什麼來提高性能?數據的插入需要用戶完成,而不是Oracle DBA,因此絕對沒有任何Oracle技能是任何解決方案的先決條件之一。基本上,用戶需要按下按鈕,一切都完成了。
編輯:業務邏輯發生在插入之前(儘管在實際插入過程中會有一點點變化,所以對於SQL Server來說更實際的數字是2分鐘,對於Oracle來說更多的是40分鐘左右。每個記錄有幾個大的斑點,所以也許這就解釋了速度慢的原因,但並不是爲什麼會有這樣的差異,這1000個項目是交易的一部分
你不啓用某種自動提交選項?你在交易中插入數據嗎? UniDAC是否支持DML數組(hm,['might not'](http://forums.devart.com/viewtopic.php?f=28&t=25135))?順便說一句。在SQL Server上插入1000行5分鐘的確是非常慢的性能。 – TLama 2014-10-29 11:26:24
我在你的問題中找不到它,所以處理順序如下:*在1000個項目上應用業務邏輯 - >插入1000條記錄*或*在1項目上應用業務邏輯 - >插入1條記錄 - >重複1000次* ?插入1000條記錄需要5分鐘時間。 – 2014-10-29 11:35:17
在上面的問題中進一步解釋。 – Steve 2014-10-29 11:58:19