MySQL /经典ASP - 使用LIMIT进行分页

MySQL /经典ASP - 使用LIMIT进行分页

问题描述:

我遇到了构建问题。MySQL /经典ASP - 使用LIMIT进行分页

我正在使用一种非常古老的记录集分页方法,它没有使用方法LIMIT。我现在已经使用LIMIT方法,它极大地加快了我的页面的速度......但它影响了我的页面的另一部分,我非常确定该如何解决它。

之前,我会像这样运行(只是举例)的查询:

SELECT photoID FROM photoSearch WHERE country = 'London' 

即使此查询将现在从伦敦返回69,000+的照片,我会接着写所有论文结果(PHOTOID INT INDEX,userID INT INDEX)添加到表(searchResults)中,因此可以在页面的其他部分使用结果。所以我有这样的:

While NOT rs.EOF 
INSERT INTO searchResults (photoID, userID) VALUES ("&photoID&","&userID&") 
rs.MoveNext 
Wend 

好了,现在再在我的网页,我要显示在照片中的人的名单,与计数一起,是在所有只是存储这些结果。这使我的用户可以将结果缩小到更具体的结果。例如,有人可以搜索“金球奖”,照片返回,他们可以看到金球奖的人名单,如布拉德皮特(8,374),安吉丽娜朱莉(7,321)等等。所以我有此查询其做到了这一点:

SELECT COUNT(*) AS totalPeople, people FROM people 
INNER JOIN photopeople ON photoPeople.peopleID = people.PeopleID 
INNER JOIN searchPhotoResults ON photopeople.photoid = searchPhotoResults.photoID 
GROUP BY people 
ORDER BY totalPeople DESC 
LIMIT 5 

但现在,因为我的数据库已经成长在过去的一年中,我搜索“伦敦”可能返回69000行,所以需要一点时间过长搜索的行并将行写入我的结果表。所以我被建议使用LIMIT分页,而不是返回69,000行,它只会返回该页面所需的数量,如20。

我现在已经改变了我的页面使用LIMIT,但你可能可以工作我已经失去了参加该活动的人名列表的功能。现在是布拉德皮特(20)和安吉丽娜朱莉(20),而不是布拉德皮特(8,374)......这是不好的。

所以这是我的两难困境,我希望(需要)使用LIMIT来加速我的页面,但它取消了人名的列表,这也是我真正想要的。如果我不使用LIMIT,那么我的搜索对于更常见的单词来说太慢了 - 看起来我不能赢!

有没有人可以告诉我如何解决这个问题?我希望我解释得很好...

我想你只需要把原来凡在你的“小面”的查询,而不是使用临时表子句:

SELECT COUNT(*) AS totalPeople, people FROM people 
INNER JOIN photopeople ON photoPeople.peopleID = people.PeopleID 
INNER JOIN photoSearch ON photopeople.photoid = photoSearch.photoID 
WHERE country = 'London' 
GROUP BY people 
ORDER BY totalPeople DESC 
LIMIT 5 
+0

好,感谢您的输入。我会尝试并实施这个,看看它是如何发展的。我可以看到的唯一问题是,当我想要显示事件列表以及人员列表时,将会有两个大型搜索处理......但是我想直到我测试它时才会知道。很快回来:) – TheCarver

+0

我试过这个,不知道它是否运作良好 - 我将不得不尝试调整它。毫无疑问,它减少了像“伦敦”这样的最常见搜索所花费的时间,它将返回69,000行,但它似乎为更简单的搜索增加了一点时间,这通常会非常快速 – TheCarver

+0

您还应该检查以确保您有一个索引定义在您正在搜索的字段上,如国家和ID参考 –