생각해보십시오. 순위가 매번 변경 될 때마다 비용이 많이 드는 작업을 수행하는 대신 복잡한 접근 방법이 더 좋은지 알아보십시오.
하지만 먼저이 값은 Points
에만 달려 있습니다. 또한 상위 10 위 만 필요하다고 가정합니다. "나는 10000에서 7654로 등급이 매겨졌다"는 것을 발견하지 않아도된다)
등급이 올라갈 때마다 반응하는 방아쇠 (또는 앱 코드)를 설정한다. 포인트를 함께 더하고 임계 값을 확인합니다. 10 위 아래라면 아무 것도하지 마십시오.
이상인 경우 SELECT ... ORDER BY ... LIMIT 10
을 수행하여 새로운 "상위 10 개"를 얻고 결과를 별도의 테이블에 저장하십시오. 또한 임계 값을 갱신하십시오.
수 혜택 :
- 이 별도의 표는 '여러 번 각 초'액세스하지만, 기본 테이블이 할 필요는있는 것이다.
- 시간이 가장 적게 걸리는 시간은? (그러나 많은 수의 upvoted 것들에 대한 더 많은 일을하고있다.)
- 메인 테이블 (10K 행)에서 순위 표시 테이블 (10 행)을 분리함으로써 잠금 경합을 줄입니다.
- 이 쿼리 캐시 사용 사례가 될 수 있습니다
- 전원을 켜고 그것을,
- 가 (너무 큰되지 않음)
query_cache_size = 20M
을 설정
query_cache_type = DEMAND
이 순위
SELECT
에
SQL_CACHE
를 추가; 다른 대부분의
SELECTs
에
SQL_NO_CACHE
을 추가하십시오. 은 "톱 50"를 절약 고려하면 "10"의 한 페이지 이상이 필요한 경우
. 처음 5 페이지에는 새 테이블로 충분합니다. 6 페이지 이상에서는 어려운 방법입니다 (10K 행 테이블을 스캔하십시오). 바라기를, 이것은 아직도 이점이 있기 위하여 희소 할 것이다.
최상의 방법은 더 쉬운 방법 (합계를 저장하지 않고)을 시도하고 성능이 * 수용 가능한지 확인하는 것입니다. 어떤 것이 더 낫지 만, 심지어는 더 빠르면 1000 초의 속도가 더 빨라지거나, 120 밀리 초에서 펨토 세컨드 미만의 대기 시간이 걸리더라도, 120 밀리 초는 페이지에 대해 충분히 빠릅니다. 하중. 즉, 성능은 사용자 경험에 극적으로 영향을주는 경우에만 매우 중요합니다. –