문제

생각할수록 더 의미가있는 이상한 곡선을 가진 것 중 하나입니다.물론 어느 정도.그리고 그것은 전혀 이해가되지 않습니다.

나를 깨우치게 하시겠습니까?

도움이 되었습니까?

해결책

대부분의 경우 결과를 먼저 정렬해야하기 때문입니다.예를 들어 Google에서 검색 할 때 최대 100 페이지의 결과 .주어진 키워드 (또는 키워드 조합)에 대해 1000 개 이상의 웹 사이트를 페이지 순위별로 정렬하지 않습니다.

페이지 매김이 빠릅니다.정렬 속도가 느립니다.

다른 팁

Lubos 가 옳습니다. 문제는당신은 페이징을하고 있지만 (이것은 엄청난 양의 데이터를 가져가는 것입니다.) 실제로 페이지에서 무슨 일이 일어나고 있는지 알아 내야합니다.

페이지를 표시해야한다는 사실은 데이터가 많다는 것을 의미합니다.많은 데이터를 정렬하는 데 오랜 시간이 걸립니다. :)

정말 모호한 질문입니다.문제를 더 잘 이해하려면 구체적인 예가 필요합니다.

이 질문은 꽤 잘 다루어 진 것 같지만, 많은 사람들의 관심을 끌기 때문에 MySQL과 관련된 약간의 내용을 추가하겠습니다.

SQL_CALC_FOUND_ROWS를 사용하지 마십시오.데이터 세트가 사소한 경우가 아니면 두 개의 개별 쿼리에서 일치 항목을 계산하고 x 개의 일치 항목을 검색하는 것이 훨씬 빨라질 것입니다.( 사소한 경우 어느 쪽이든 차이를 거의 느끼지 못할 것입니다.)

당신이 인쇄 된 페이지의 페이지 매김 을 의미한다고 생각했습니다. 여기서 제가 이빨을 자릅니다.페이지의 모든 콘텐츠 수집, 위치 지정 (여기에는 수많은 규칙, constrait 엔진이 상당히 도움이 됨) 및 정당화에 대한 대단한 독백을 입력하려고했지만 웹 페이지에서 정보를 구성하는 과정에 대해 이야기하고 있었던 것 같습니다..

그렇다면 데이터베이스 조회수가 맞을 것 같습니다.디스크 액세스가 느립니다.메모리에 저장하면 정렬이 저렴합니다.

물론 임의의 쿼리에 대한 정렬에는 시간이 좀 걸리지 만 동일한 페이지가 매겨진 쿼리가 규칙적으로 사용되는 데 문제가있는 경우 데이터베이스 설정에 문제가 있습니다 (부적절한 인덱싱 / 아무것도 없음, 너무 적은 메모리 등) . 나는 db 관리자가 아닙니다) 또는 페이지 매김을 심각하게 잘못하고 있습니다 :

매우 잘못됨 : 예 : select * from hugetable where somecondition;를 배열로 수행하여 array.length로 페이지 수를 가져오고 관련 인덱스를 선택하고 배열을 삭제합니다. 그런 다음 각 페이지에 대해 이것을 반복합니다. 이것이 제가 심각하게 잘못 부르는 것입니다.

더 나은 솔루션은 두 가지 쿼리입니다. 하나는 개수 만 가져오고 다른 하나는 limitoffset를 사용하여 결과를 가져옵니다. (일부 독점적 인 비표준 SQL 서버에는 하나의 쿼리 옵션이있을 수 있습니다. 몰라요)

나쁜 솔루션은 실제로 작은 테이블에서 매우 잘 작동 할 수 있습니다 (사실 두 쿼리를 만드는 오버 헤드가 하나의 쿼리에서 모든 행을 가져 오는 것보다 더 크기 때문에 매우 작은 테이블에서 더 빠르다는 것은 생각할 수없는 일이 아닙니다. 그렇다 라고 ...)하지만 데이터베이스가 커지기 시작하면 문제가 분명해집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top