COUNT(*)
카운트 열 인덱스를 가져 오면 최상의 결과가 될 것입니다. MyISAM 엔진을 사용하는 Mysql은 실제로 행 수를 저장하지만 모든 행을 계산하려고 할 때마다 모든 행을 계산하지는 않습니다. (기본 키 열 기준)
행을 계산하기 위해 PHP를 사용하는 것은 그리 현명하지 않습니다. mysql에서 php로 데이터를 보내야하기 때문입니다. mysql 측에서 동일한 결과를 얻을 수 있는데 왜 그렇게합니까?
(가) 경우 COUNT(*)
천천히, 당신은 실행해야 EXPLAIN
쿼리에 인덱스가 실제로 사용하는 경우 확인하고 그들이 어디에 추가해야합니다.
다음은 가장 빠른 방법 COUNT(*)
은 아니지만 실제로 적합하지 않은 경우가 있습니다. 결과 그룹화를 시작하면 COUNT
실제로 모든 행을 계산하지 않는 문제가 발생할 수 있습니다 .
해결책은 SQL_CALC_FOUND_ROWS
. 일반적으로 행을 선택하지만 총 행 수를 알아야 할 때 (예 : 페이징) 일반적으로 사용됩니다. 데이터 행을 선택할 때 SQL_CALC_FOUND_ROWS
SELECT 뒤에 키워드를 추가하십시오 .
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
필요한 행을 선택한 후 다음 단일 쿼리로 개수를 가져올 수 있습니다.
SELECT FOUND_ROWS();
FOUND_ROWS()
데이터 선택 쿼리 직후에 호출해야합니다.
결론적으로 모든 것은 실제로 얼마나 많은 항목이 있고 WHERE 문에 무엇이 있는지에 달려 있습니다. 행이 많을 때 (수만, 수백만 이상) 인덱스가 사용되는 방식에주의를 기울여야합니다.
SELECT 1
하지SELECT *
. 차이가 있습니까?