我有一個網站,可以讓人們查看錶中的行(每一行都是圖片)。有超過10萬行。您可以查看行的不同子集,並可以使用不同的排序順序查看它們。在查看其中一行時,您可以單擊「下一步」或「上一步」按鈕來轉到列表中的下一個/上一個行。MySQL結果集上Next按鈕的高效算法
您將如何實現網站的「下一步」和「以前」功能?
更具體地說,如果您有一個任意查詢返回一個最多100,000行的列表,並且您知道某人正在查看的當前行的某些信息,那麼您如何有效地確定NEXT行?
這是我在網站年輕時提出的解決方案的僞代碼,當只有1000行時它運行良好,但現在有100,000行,我認爲它消耗了太多的內存。
int nextRowId(string query, int currentRowId)
{
array allRowIds = mysql_query(query); // Takes up a lot of memory!
int currentIndex = (index of currentRowId in allRowIds); // Takes time!
return allRowIds[currentIndex+1];
}
當你在思考這個問題,請記住,該網站將不只是它的ID存儲更多的信息,關於當前行(例如,當前行的結果集中的位置),並將此信息可以用作提示來幫助確定下一行的ID。
編輯:對不起,不提此以前,但這不只是一個靜態的網站:行通常可以添加到列表中,並在列表行可以被重新排序。 (更爲罕見的是,行可以從列表中刪除。)我認爲我應該擔心這種事情,但也許你可以說服我。
感謝您的回答!請看我對Machine的回答的看法,因爲它們都適用於你的回答。 – 2009-07-07 06:32:26