dim sql,rs,cmd,r
sql = "Select [columns] From [table] Where [cloumns]='something' order by [columns]"
Set cmd = Server.CreateObject("Adodb.Command")
cmd.ActiveConnection = conn
cmd.CommandText = sql
Set rs = cmd.Execute
If Not rs.eof then
r = rs.getRows
end if
rs.close
Set rs = Nothing
Set cmd = Nothing
因爲Command要快過直接Recordset Open,所以我們選擇Command;
因爲GetRows直接將所有查詢結果保存到內存,不需要每次Recordset Move,所以我們選擇GetRows。
以下是關於這幾種方式對比的一些數據:
Access數據庫保存10W條數據
通過普通的Recordset Open提取:
<%
Set conn= Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db2.mdb")
conn.Open connstr
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from people order by id desc"
rs.Open sql,conn,1,1
Do While Not rs.EOF
Response.write rs("id")&" | "
rs.MoveNext
Loop
%>
結果如下:
耗時3,250.000毫秒,總測試平均值在3秒左右
==========================================================
通過使用Command方式提取:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb")
cmd.ActiveConnection = conn
cmd.CommandText = "Select * from people order by id desc"
Set rs = cmd.Execute
Do While Not rs.EOF
Response.write rs("id")&" | "
rs.MoveNext
Loop
%>
結果如下:
耗時2,187.500毫秒,總測試平均值在2秒左右
=========================================================
發現,以上兩種均不能徹底解決執行時間漫長的問題,主要原因即是循環每次都須向數據庫抽取記錄(Command速度相對較快)
那麼使用Command + GetRows()方法又會是一個怎樣的情況呢:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb")
cmd.ActiveConnection = conn
cmd.CommandText = "Select * from people order by id desc"
Set rs = cmd.Execute
rsArray = rs.GetRows()
For i = 0 To UBound(rsArray, 2)
Response.Write rsArray(0, i)&" | "
Next
%>
耗時187.500毫秒,總測試平均值在0.2秒左右
很明顯,我們可以很明顯的感覺到,在ASP中使用Command+GetRows的方法來讀取數據庫數據是目前爲止所知的具有最高效率的方式!擴展閱讀:
GetRows 方法GetRows方法能夠將 Recordset 對象中的多個記錄存儲到內存數組中。
GetRows語法
array = recordset.GetRows( Rows, Start, Fields )
GetRows返回值
返回二維數組。
GetRows參數
Rows 可選,長整型表達式,指定要檢索記錄數。默認值爲 adGetRowsRest (-1)。
Start 可選,字符串或長整型,計算得到在 GetRows 操作開始處的記錄的書籤。也可使用下列 BookmarkEnum 值。
常量 說明 AdBookmarkCurrent 從當前記錄開始。 AdBookmarkFirst 從首記錄開始。 AdBookmarkLast 從尾記錄開始。Fields 可選,變體型,代表單個字段名、順序位置、字段名數組或順序位置號。ADO 僅返回這些字段中的數據。
GetRows使用說明
使用 GetRows 方法可將記錄從 Recordset 複製到二維數組中。第一個下標標識字段,第二個則標識記錄號。當 GetRows 方法返回數據時數組變量將自動調整到正確大小。
如果不指定 Rows 參數的值,GetRows 方法將自動檢索 Recordset 對象中的所有記錄。如果請求的記錄比可用記錄多,則 GetRows 僅返回可用記錄數。
如果 Recordset 對象支持書籤,則可以通過傳送該記錄的 Bookmark 屬性值,來指定 GetRows 方法將從哪個記錄開始檢索數據。
如要限制 GetRows 調用返回的字段,則可以在 Fields 參數中傳送單個字段名/編號或者字段名/編號數組。
在調用 GetRows 後,下一個未讀取的記錄成爲當前記錄,或者如果沒有更多的記錄,則 EOF 屬性設置爲 True。
希望本文能幫助大家學習到ASP中如何使用GetRows獲得更高的數據庫讀取效率!