/ / Cómo mejorar el rendimiento del manejo de conjuntos de registros: mysql, asp-classic, ado, recordset

Cómo mejorar el rendimiento del manejo del conjunto de registros: mysql, asp-classic, ado, recordset

He escrito una aplicación web en ASP que lee3600 filas de una base de datos MySQL (v5.1.63) y genera los datos en una tabla HTML. Estoy usando un conjunto de registros para obtener los datos y el tamaño de página / ubicación del cursor para permitir que el usuario avance / retroceda entre las páginas. La base de datos contiene unas 200.000 filas en este momento, pero está en continuo crecimiento.

La página tarda más y más en cargarse (aprox. 15-20 segundos ahora) y me gustaría optimizarla si es posible.

Me interesaría mucho obtener consejos sobre cómo mejorar el rendimiento.

Aquí está la estructura de la base de datos:

# Col Tipo ColaciónAtributos Nulo Predeterminado 1 ID int (11) No Ninguno AUTO_INCREMENT 2 varchar medio (5) utf8_general_ci No Ninguno 3 max varchar (5) utf8_general_ci No Ninguno 4 min varchar (5) utf8_general_ci No Ninguno 5 dt varchar (20) utf8_general_ci No Ninguno 6 dir varchar (2) utf8_general_ci No Ninguno 7 texto de registro utf8_general_ci No Ninguno

Aquí está el código que estoy usando:

" 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

Respuestas

2 para la respuesta № 1

Si está utilizando MySQL como RDMS, sería mucho más eficiente si realizara la paginación utilizando mySqls LIMIT cláusula:

es decir, para obtener 10 elementos por página para un número de página de cadena de consulta dado:

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