2016-08-10 154 views
0

我在PostgreSQL數據庫中有一個視圖。在pgAdmin中執行視圖非常快(10,000條記錄)。但執行「Select * From myView;」來自VBA的速度非常慢。我使用ADO和ODBC連接到數據庫。任何人都可以給我提示如何加快速度?從Excel VBA到PostgreSQL數據庫的連接速度很慢

一個小例子:

Sub TEST() 

Dim CN As New ADODB.Connection 
Dim RS As New ADODB.Recordset 

Dim Data As Variant 
Dim SQL As String 
Dim ConStr As String 

ConStr = "Server=11.22.33.44;" & _ 
     "DSN=PostgreSQL35W 32bit;" & _ 
     "UID=xxx;" & _ 
     "PWD=xxx;" & _ 
     "Database=xxx;" _ & 
     "Port=5432;" & _ 
     "CommandTimeout=12" 

SQL = "Select * From myView;" 

Debug.Print Now() 

CN.ConnectionString = ConStr 
CN.Open 
Debug.Print Now() 

RS.ActiveConnection = CN 
RS.Source = SQL 
RS.CursorType = adOpenStatic 
RS.LockType = adLockReadOnly 
Debug.Print Now() 

RS.Open 
Debug.Print Now() 

Data = RS.GetRows 
Debug.Print Now() 

RS.Close 
CN.Close 
Set RS = Nothing 
Set CN = Nothing 

End Sub 

這給出輸出:

10/08/2016 16:14:26 
10/08/2016 16:14:26 
10/08/2016 16:14:26 
10/08/2016 16:14:38 
10/08/2016 16:18:50 

即 「RS.Open」 取零時00分12秒,和 「數據= RS.GetRows」 00: 04:12。 在pgAdmin中,顯示所有10,000條記錄的時間不到一秒鐘。

+0

當你使用'adOpenForwardOnly'與'adOpenStatic'時你有什麼改進嗎? –

+0

此外,當您使用DSN時,它必須在進行連接之前轉到註冊表,並且速度較慢。 [請查看一些可能有所幫助的提示](http://www.techrepublic.com/blog/10-things/-10-ado-best-practices/) –

+0

也嘗試ASynch處理。請參閱:https://support.microsoft.com/en-ca/kb/190988 –

回答