2011-09-18 3 views
0

내 빌드에 문제가 발생했습니다.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 

자, 이제 더 내 페이지, 내가 모든 단지 저장된 결과에있는 수와 함께 사진에있는 사람들의 목록을, 보여주고 싶어요. 이렇게하면 내 사용자가 결과를 더 구체적인 것으로 좁힐 수 있습니다. 예를 들어, 누군가 "Golden Globe Awards"를 검색하면 사진이 돌아오고 Brad pitt (8,374), Angelina Jolie (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 

하지만 지금을 내 DB는 지난 한 해 동안 성장했기 때문에, "런던"에 대한 내 검색이 행을 검색하기 위해 너무 오래 걸립니다, 그래서 69,000 행을 반환 할 수 내 결과 테이블에 행을 작성하십시오. 따라서 LIMIT 페이징을 사용하는 것이 좋습니다. 대신 69,000 개의 행을 반환하는 대신 20과 같이 해당 페이지에 필요한 금액 만 반환합니다.

이제 LIMIT을 사용하도록 내 페이지를 변경 했으므로 작동 할 수 있습니다. 그 이벤트에 참석 한 사람들 이름 목록의 기능을 잃어 버렸습니다. Brad Pitt (8,374) 대신 Brad Pitt (20 세)와 Angelina Jolie (20 세)가 있습니다.

이것이 내 딜레마입니다. 내 페이지 속도를 높이기 위해 LIMIT을 사용하고 싶지만 사람들의 이름 목록도 필요합니다. 정말 좋아합니다. LIMIT을 사용하지 않으면보다 일반적인 단어에 대한 검색 속도가 너무 느려집니다. 이길 수는 없습니다.

이 문제를 해결하는 방법에 대해 조언 해 줄 수있는 사람이 있습니까? 난 그냥 원본을 둘 필요가

답변

0

내 생각은 ... 나는 잘 설명 희망 WHERE 대신 임시 테이블을 사용하여 "페이스 팅"쿼리 절 : 귀하의 의견

확인
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

잘 작동하는지 잘 모르겠습니다. 조금만 시도하고 조정해야 할 것입니다. 의심의 여지없이 "London"과 같은 가장 일반적인 검색에 소요되는 시간이 69,000 행을 반환하지만 줄이면 검색 속도가 빨라집니다. 보통은 매우 빠릅니다. – TheCarver

+0

국가와 같은 검색중인 필드에 색인이 정의되어 있고 ID 참조도 있습니다 –