Sql 加速页面加载
我有一个2D数组,其中填充了数据库中的数据,然后在另一个sql查询的while循环中使用。对于while循环中的每个项目,我将使用For循环检查二维数组中的某些项目 由于while循环中的项目在1000-2000个项目范围内,加载网页需要3-4秒,因此如何加快速度 这是我的2d阵列-Sql 加速页面加载,sql,arrays,vbscript,asp-classic,Sql,Arrays,Vbscript,Asp Classic,我有一个2D数组,其中填充了数据库中的数据,然后在另一个sql查询的while循环中使用。对于while循环中的每个项目,我将使用For循环检查二维数组中的某些项目 由于while循环中的项目在1000-2000个项目范围内,加载网页需要3-4秒,因此如何加快速度 这是我的2d阵列- 'MultiDimensional Array Dim permissionsArray() Dim permissionsCount connectionstring = obj_ADO.getconnect
'MultiDimensional Array
Dim permissionsArray()
Dim permissionsCount
connectionstring = obj_ADO.getconnectionstring
Increment = 1
set c = CreateObject("ADODB.Connection")
set r = CreateObject("ADODB.Recordset")
c.open connectionstring
SQL = "select Count(P_Name) as permissionsCount from l_objectpermission inner join A_Permission on op_permissionID = P_permissionID"
r.open SQL, c
permissionsCount = r("permissionsCount")
r.close
c.close
Set objCon = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")
objCon.Open connectionstring
SQL = "select OP_ObjectID, P_Name from l_objectpermission inner join A_Permission on op_permissionID = P_permissionID order by P_Name"
objRS.open SQL, objCon
Redim permissionsArray(2, permissionsCount)
if not objRS.EOF then
objRS.MoveFirst
while not objRS.EOF
permissionsArray(0, increment) = objRS("OP_ObjectID")
permissionsArray(1, increment) = objRS("P_Name")
objRS.MoveNext
Increment = Increment + 1
wend
objRS.close
objCon.close
end if
在我的while循环中是-
Page_ID = objRS("P_PageID")
for i = 0 to (permissionsCount)
if permissionsArray(0, i) = Page_ID then
%>
<li style="height: 2px;">
<%=permissionsArray(1,i)%>
</li>
</br>
<%
end if
next
%>
</div></center></td>
Page\u ID=objRS(“P\u PageID”)
对于i=0至(许可证)
如果permissionsArray(0,i)=页面ID,则
%>
高度:2px;“>
这是你的瓶颈:
if not objRS.EOF then
objRS.MoveFirst
while not objRS.EOF
如果您只需要一个二维数组,那么可以使用Recordset.GetRows()代替
参考文献:假设问题与ADODB方面有关,而不是您试图渲染2000
SQL = "select OP_ObjectID, P_Name from l_objectpermission inner join A_Permission on op_permissionID = P_permissionID order by P_Name"
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = 2 'adUseServer
rs.LockType = 1 'adLockReadOnly
rs.CursorType = 0 'adOpenForwardOnly
rs.ActiveConnection = c
rs.Open SQL
If NOT rs.EOF Then
permissionsArray = rs.GetRows()
End If
rs.close()
Set rs = Nothing
c.Close()
Set c = Nothing
@Sean:
Redim permissionsArray(22000)
绝对不是一个昂贵的电话!试试看-1表示错误诊断,除非/直到你能证明我错了,或者你删除了该声明。@Jean-François Corbett,只有当数组已满且使用了Preserve
关键字时,你才是正确的。这里昂贵的调用是Recordset.MoveNext和Recordset.EOF,就像在循环中一样,每当Recordset.GetRows完成相同的任务时,都会调用它们。@Sean:没错。这就是你应该在答案中指出的--1这是一个侧重点,但在我看来,您只需要permissionsArray
维度1中的索引0到1,即Redim permissionsArray(1,permissionscont)
。出于好奇……最终结果是什么?您是否能够减少页面加载时间?PermissionScont=UBOUND(permissionsArray)+1,但在其他方面是完美的。我的代码被设置为adUseClient,因为它是从一些用于连接MySQL数据库的旧代码修改而来的。。。
SQL = "select OP_ObjectID, P_Name from l_objectpermission inner join A_Permission on op_permissionID = P_permissionID order by P_Name"
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = 2 'adUseServer
rs.LockType = 1 'adLockReadOnly
rs.CursorType = 0 'adOpenForwardOnly
rs.ActiveConnection = c
rs.Open SQL
If NOT rs.EOF Then
permissionsArray = rs.GetRows()
End If
rs.close()
Set rs = Nothing
c.Close()
Set c = Nothing