mysql - 如何提高记录集处理的性能

标签 mysql asp-classic ado recordset

我用 ASP 编写了一个 Web 应用程序,它从 MySQL 数据库 (v5.1.63) 读取 3600 行并将数据输出到 HTML 表中。我正在使用记录集来获取数据和页面大小/光标位置,让用户在页面之间前进/后退。该数据库目前包含大约 200.000 行,但还在不断增长。

页面加载时间越来越长(现在大约 15-20 秒),如果可能我想对其进行优化。

我对获得有关如何提高性能的提示非常感兴趣。

这是数据库结构:

#   Col   Type          Collation       Attributes  Null    Default
1   ID    int(11)                         No       None     AUTO_INCREMENT
2   mean  varchar(5)    utf8_general_ci   No       None 
3   max   varchar(5)    utf8_general_ci   No       None 
4   min   varchar(5)    utf8_general_ci   No       None 
5   dt    varchar(20)   utf8_general_ci   No       None 
6   dir   varchar(2)    utf8_general_ci   No       None 
7   log   text          utf8_general_ci   No       None 

Here is the code I'm using:

' Opening the db
Set oConn = Server.CreateObject("ADODB.Connection")
Set oRS = Server.CreateObject("ADODB.Recordset")
oConn.ConnectionString =
"DRIVER={MySQL};SERVER=<server>;DATABASE=<database>;UID=<uid>;PWD=<pwd>;"
oConn.Open

' Retrieve 3600 records
sSQL = "SELECT * FROM mytable ORDER BY id DESC"
oRS.CursorLocation = adUseServer
oRS.PageSize = 6*600
oRS.Open sSQL, oConn, adOpenForwardOnly, adLockReadOnly
nPageCount = oRS.PageCount

...code to set the page selected by the user (nPage)

oRS.AbsolutePage = nPage

Do While Not (oRS.EOF Or oRS.AbsolutePage <> nPage)
    ...
    Response.Write("<td>" & oRS("dt") & "</td>")
    Response.Write("<td>" & oRS("mean") & "</td>")
    Response.Write("<td>" & oRS("min") & "</td>")
    Response.Write("<td>" & oRS("max") & "</td>")
    ...
    oRS.MoveNext
Loop
oRS.Close

最佳答案

如果您使用 MySQL 作为 RDMS - 如果您使用 mySqls LIMIT 子句执行分页,效率会高得多:

即对于给定的查询字符串页码,每页获取 10 个项目:

ItemsPerPage    = 10
PageNumber      = request.querystring("Page")

if PageNumber = "" then 
    PageNumber = 0
end if

Limit           = PageNumber * ItemsPerPage
Query           = "SELECT * FROM mytable ORDER BY id DESC LIMIT " & Limit & ", " & ItemsPerPage

关于mysql - 如何提高记录集处理的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490111/

相关文章:

asp-classic - 设置 ADO 命令的 ActiveConnection = Nothing 是否会关闭底层 SQL 连接?

c++ - 是否可以使用 ADO 和 C++ 从 SQL 存储过程中获取 CString 返回值(例如名称)的值

php - 无法使用 PHP 7 初始化 mbstring

mysql - 从 Ubuntu 11.10 到 Amazon EC2 BitNami LampStack 实例的 JDBC 连接 - 拒绝访问(使用密码 : YES)

java - 修改java/php

html - 使用经典 ASP 替换 HTML 中的文本

mysql - SQL,如何测试并发事务

mysql - 尝试合并表时出现 Access 错误

c# - IIS 7.5 无法使用代码隐藏文件加载自定义 HTTP 处理程序

sql - 如何 SQL 使用 VBScript(或 VB6)从字节/整数数组插入原始/二进制字段值?