比較兩個不同的 ODBC 系統 DNS 條目。哪個更快?PS腳本
我想找出在我的帶有 Windows Server 2008 R2 的 VM 上哪個 ODBC 連接更快。我有兩個不同的 ODBC 提供程序。第一個是 v11 中的“Oracle Instant Client ODBC”。另一個“Microsoft ODBC for Oracle”。我想,我可以使用 Powershell 來測試兩個類似查詢與每個提供程序一起執行多長時間。(稍後我還想測試 MS Provider for Oracle 在 Win08R2 或 Win12R2 上是否更快)
我在這裡找到了一個不錯的腳本:LINK
我只修改了一點。所以現在我有 tihs litte 腳本:
#SQL Authentication $t_start = Get-Date $connectstring = "DSN=instant;Uid=USER;Pwd=PASSWORD;" #Windows Authentication #$connectstring = "DSN=myDsn;" $sql = "SELECT * FROM TABLE1 WHERE ROWNUM <= 900;" $conn = New-Object System.Data.Odbc.OdbcConnection($connectstring) $conn.open() $cmd = New-Object system.Data.Odbc.OdbcCommand($sql,$conn) $da = New-Object system.Data.Odbc.OdbcDataAdapter($cmd) $dt = New-Object system.Data.datatable $null = $da.fill($dt) $conn.close() $dt | measure $t_end = Get-Date Write-Host ($t_end - $t_start)
它適用於小查詢,但問題是如果我想選擇超過 840 行,我會收到錯誤:
Exception calling "Fill" with 1 argument (s): "Input string was not in a correct format." Line: 14 Sign: 2 In Zeile:14 Zeichen:2 + $null = $da.fill($dt) + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : FormatException
腳本的結果是:
Count : 840 Average : Sum : Maximum : Minimum : Property : 00:00:01.4530713
如果我將 SQL-Query 更改為“
ROWNUM <= 839
”,它可以工作。如果我更改為“ROWNUM <= 841
”,我會收到此錯誤。我的目標是真正做一個像“
ROWNUM <= 1.000.000
”這樣的大查詢我查詢的表有大約 1.200.000 行…
是否有可能更改某些內容,以便我能夠查詢大表?或者有沒有人可以使用一個不錯的免費軟體工具來查詢 ODBC-SYSTEM-DSN 條目並獲得有用的查詢時間,以便我可以比較不同的 ODBC?
我沒有做很多 PS,所以不確定錯誤到底在說什麼,但是……看起來你正試圖用 select *? 的輸出填充本地表?如果這是真的,我想知道 PS 是否為 rownum 創建了一個帶有數字/int 列類型的臨時表,但第 840 或 841 行中的 rownum 值不是數字/int。或其他列的類似內容。
設置臨時表時需要一種數據類型,但正在尋找另一種數據類型。
在從事數據等工作的這些年裡,我已經多次看到這種情況發生。
rownum 總是有數字嗎?
所有數據行 840 和 841 是什麼樣的?
如果您逐項列出一個欄位而不是 select * 會發生什麼?即選擇
$$ first_ name $$來自表 1,其中 ROWNUM <= 900; 如果你改變了rownum怎麼辦?900到1800之間?
順便說一句:很酷的腳本!