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 № 1Si 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