我有一個4M行的Access數據庫,每個數據庫表示一個單獨的客戶訂單。分組數據減慢查詢,儘管結果數量減少了25%
我需要從Excel運行查詢(我使用VBA)以便僅檢索REGION1
中的客戶的訂單。
我嘗試以下(名稱應該是相當不言自明):
Sub Query()
Dim cn As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
strFile = "C:\Users\MyName\Desktop\DataBase.accdb"
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
strSQL = "SELECT [CUSTOMER], [DATE], [REVENUE]" _
& "FROM [SALES DB]" _
& "WHERE [REGION]='REGION1'"
rs.Open strSQL, cn, 0, 1
Worksheets(1).Cells(2, 1).CopyFromRecordset rs
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
這工作得很好,但它是一個有點慢,因爲它返回〜600K行。
所以我想:「誰在關心所有客戶訂單的詳細清單?我只需要每月的總量,這應該減少返回的行數,從而提高速度!」。
所以我改變了我的代碼:
strSQL = "SELECT [CUSTOMER], MONTH([DATE]), YEAR([DATE]), SUM([REVENUE])" _
& "FROM [SALES DB]" _
& "WHERE [REGION]='REGION1'"
& "GROUP BY [CUSTOMER], MONTH([DATE]), YEAR([DATE])"
如我所料,現在只〜450K結果中。事情是,查詢實際上變慢了。
我實際上最好提取未分組的數據,然後用一個簡單的數據透視表進行聚合。
如何減少數據提取速度?我知道有一些計算需要在兩者之間進行,但仍然存在。
有沒有人有任何想法我可以克服這個問題?
問題是Access,Excel和VBA – Dani 2012-03-20 11:18:06
大聲笑,我還有什麼其他的選擇? – Bruder 2012-03-20 11:21:50
LAMP,http://en.m.wikipedia.org/wiki/LAMP_(software_bundle) – Dani 2012-03-21 05:35:25