본문 바로가기
Development/PHP

쿼리 페이징을 최대한 빠르게

by Dev. Jkun 2011. 9. 22.
반응형

 

보통 처음 웹프로그램을 PHP로 배울때 게시판같은걸 만들게 되죠.

이번에 SQL에서 재밌는 기능을 발견해서 글을 남겨봅니다.

 

 

우선 PHP에서 가장 기본적으로 지원하는 쿼리 결과 카운트 함수입니다.

 

mysql_num_rows($result);

 

생긴게 참 직관적이지만, 속도가 완전 저질입니다. 실제로 처음에 잘 모르고 상업용 사이트에 사용했다가 피본적도 있죠.

 

이는 쿼리를 일일히 세아려서 총 갯수를 구하는 방식이라서 mysql_fetch_array를 계속 돌리는거나 마찬가지입니다.

 

그래서 요즘엔 처음 공부할때 빼고는 거의 쓰지도 않는 것 같네요.

 

 

다음은 sql의 힘을 빌어서 총 카운트를 구하는 방식입니다.

 

$query = "select count(*) as cnt from table";

 

이렇게 구할 쿼리 앞에 count(*)를 통해 결과로 나올 행의 카운트를 구할 수 있습니다. 이 쿼리를 날려 결과값을 받아와 cnt를 확인해보면 됩니다.

 

이경우엔 count(*)가 너무 이기적이라 다른 인자를 함께 받아올수가 없는 단점이 있어 한번더 데이터를 받아오는 쿼리를 날려야합니다. 쿼리를 두번날리는 격이되죠.

 

 

 

오늘 소개할 방법은 아래와 같습니다.

 

$query = "select SQL_CALC_FOUND_ROWS * from table"

 

우선 이렇게 작성할 쿼리 내에 'SQL_CALC_FOUND_ROWS' 요런 셋팅을 걸어줍니다.

이렇게 사용하여 쿼리를 날린 후에 기존과 같이 똑같이 사용하면 됩니다. 사용법에 아무런 문제가 없습니다.

 

그리고 총 카운트를 알고 싶을때 또다시 쿼리를 날립니다.

 

$query = "SELECT FOUND_ROWS() as cnt";

 

이 쿼리를 날린다음 결과의 cnt 값을 읽어내면 클리어, 맨처음 쿼리가 들어갔을때 기억해놓은 것이기 때문에 단순한 변수를 받아오는 것마냥 빠릅니다.

 

카운트를 알아내야할 쿼리를 보낼때에는 이런 방식을 사용하면 계산시간이 절반으로 뚝 떨어지겠죠.

 

 

 

SQL도 보면 볼수록 신기한 것 같습니다. 모르면 아무것도 모르고 알면 알수록 편해지는 블랙박스네요.


 

반응형

'Development > PHP' 카테고리의 다른 글

PHP 엑셀다운로드  (0) 2011.11.28
PHP 날짜함수 2  (0) 2011.10.10
PHP 기본적인 페이징(Paging)  (0) 2011.09.22
PHP 날짜 함수  (0) 2011.09.22
PHP 문자열 함수  (0) 2011.09.22

댓글