/ / Як покращити ефективність обробки наборів записів - mysql, asp-classic, ado, recordset

Як покращити продуктивність обробки наборів записів - mysql, asp-classic, ado, recordset

Я написав веб-додаток в ASP, який читає3600 рядків із бази даних MySQL (v5.1.63) та виводить дані у таблицю HTML. Я використовую набір записів для отримання даних і розміру сторінок / курсору, щоб користувач міг переходити назад / назад між сторінками. База даних містить близько 200 000 рядків прямо зараз, але постійно зростає.

Завантаження сторінки займає більше часу і довше (приблизно 15-20 секунд), і я хотів би оптимізувати її, якщо це можливо.

Мені було б дуже цікаво отримати поради щодо підвищення ефективності.

Ось структура бази даних:

# Col Col Type CollationАтрибути Null Default 1 ID int (11) Ніякий AUTO_INCREMENT 2 середнього varchar (5) utf8_general_ci Ні Ні 3 max varchar (5) utf8_general_ci Ні Ні 4 хв. Varchar (5) utf8_general_ci Ні 5 dt varchar (20) utf8_general_ci Ні Ні 6 dir varchar (2) utf8_general_ci Ні Ні 7 текст журналу utf8_general_ci Ні Ні

Ось код, який я використовую:

" 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

Відповіді:

2 для відповіді № 1

Якщо ви використовуєте 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