我的构建遇到了问题。
我使用了一种非常古老的记录集分页方法,它没有使用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
但是现在,因为我的数据库在去年增长了,我对“伦敦”的搜索可能会返回69,000行,因此搜索行并将行写入结果表需要一点时间。所以我被建议使用LIMIT分页,而不是返回69,000行,它只返回该页面所需的数量,如20。
我现在已经改变了我的页面以使用LIMIT,但是你可能已经解决了,我已经失去了参加该事件的人名列表的功能。而不是布拉德皮特(8,374),现在是布拉德皮特(20)和安吉丽娜朱莉(20)......这是不好的。
所以这就是我的困境,我希望(需要)使用LIMIT来加速我的页面,但它会删除人们的名字列表,这也是我真正想要的。如果我不使用LIMIT,我的搜索对于更常见的单词来说太慢了 - 似乎我无法获胜!
有没有人可以告诉我如何解决这个问题?我希望我解释得很好......
答案 0 :(得分:0)
我认为您只需要将原始WHERE子句放在“faceting”查询中,而不是使用临时表:
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