2012-01-30 4 views
2

예를 들어 기사에 속한 댓글을 집계해야하는 경우 총 댓글을 캐시 할 필요가 없습니다.필드에 총 개수를 저장하는 것이 언제 고려해야합니까?

하지만 1 백만 장의 사진이 포함 된 갤러리 (위치는 1)에 페이지를 매기고 싶습니다. counts 또는 SELECT count (id)라는 테이블에 매번 괜찮 았는지를 저장해야합니까?

다른 해결책이 있습니까?

알려 주시기 바랍니다. 감사.

답변

4

MySQL의 경우 카운트를 저장할 필요가 없으며 SQL_CALC_FOUND_ROWS을 사용하여 두 개의 쿼리를 피할 수 있습니다.

예, 수동에서

SELECT SQL_CALC_FOUND_ROWS * 
FROM Gallery 
WHERE status = 1 
LIMIT 10; 
SELECT FOUND_ROWS(); 

: 어떤 경우에는

,하지만 을 실행하지 않고 문 가 제한없이 돌아왔다 얼마나 많은 행을 알고하는 것이 바람직하다 진술을 다시합니다. 이 행 수를 얻으려면 SELECT 문에 SQL_CALC_FOUND_ROWS 옵션을 포함시킨 다음 나중에 FOUND_ROWS()를 호출하십시오.

샘플 사용량 here.

+0

@oaziz 위의 편집을 참조하십시오. – RedFilter

1

매번 카운트를하는 것이 좋습니다.

  1. denormalied 수가 그것은 의존
2

  • 없음 - 하나의 의지 페이지에 너무 많은 항목 오래된 될 것입니다 :

    페이징 동안, 당신은 어쨌든

    SQL_CALC_FOUND_ROWS을 사용할 수 있습니다 1 백만 개의 레코드가있는 해당 테이블에서 수행되는 쿼리 양에 대한 here. 좋은 인덱스, 특히 멀티 컬럼 인덱스를 고려해보십시오 (많은 사람들이 수행 할 수 있습니다.)

    열이 매우 규칙적이라면 MySQL이 캐시 할 수없는 경우 저장하는 것을 고려해보십시오. 그러나 상황이 느려질 수 있기 때문에 대부분의 경우 좋은 인덱싱을 사용합니다.

    최상의 시도 : 쿼리가 여전히 빠르며 한 번에 여러 번 실행하면 성능이 떨어지지 않는 경우 문제가 발생할 수 있습니다.

    쿼리를 수행하는 방법과 개선 할 수있는 방법에 대한 정보를 얻으려면이 명령을 사용하십시오 (MySQL에서).

  • 관련 문제