알이즈웰
[MySql] SQL_CALC_FOUND_ROWS, FOUND_ROWS() 본문
*
SQL_CALC_FOUND_ROWS를 사용하고, FOUND_ROWS() 쓸때의 주의점
1.
SELECT SQL_CALC_FOUND_ROWS
a.column1
a.column2
FROM (SELECT column1, column2 FROM table order by reg_date desc) a
LEFT JOIN table b on a.column1 = b.column1
limit 0,500
2.
SELECT SQL_CALC_FOUND_ROWS
a.column1
a.column2
FROM (SELECT column1, column2 FROM table order by reg_date desc limit 0,500) a
LEFT JOIN table b on a.column1 = b.column1
1, 2번의 차이는 limit를 서브쿼리에 썼냐, 바깥에 썼냐인데
성능개선을 위해 2번처럼 안쪽에 써뒀었다.
그리고 나서 SQL_CALC_FOUND_ROWS를 알고 써먹으려했는데,
SQL_CALC_FOUND_ROWS는 limit가 바깥에 있어야만 무시하고 전체 건수를 저장할 수 있나보다.
2번처럼 안쪽에 쓸 경우 FOUND_ROWS() 로 조회 시 전체 건수가 나오는게 아니라 limit된 500개만 나온다.
SQL_CALC_FOUND_ROWS를 쓰려면 limit를 바깥에 두거나, 안쓰고 limit를 안쪽에 둬야할듯
-> 그렇다고 SQL_CALC_FOUND_ROWS를 서브쿼리에 넣으면 에러뜸ㅎㅎ;
Incorrect usage/placement of 'SQL_CALC_FOUND_ROWS'
*
참고
-
MySql의 SQL_CALC_FOUND_ROWS와 FOUND_ROWS()
설명이 잘 되어있다. 페이징 처리 시 성능향상을 위한 예시로 들어주었다.
(count 쿼리를 추가하지않고 total 개수 가져오는 것)
하지만 어차피 full scan을 할 것이니 그것을 감안하고 사용하라는 조언도 해주었다.
위 글에서 포함되어있는 해당 힌트의 기본적인 동작은
여기를 참고하라고 한다.
-
[MYSQL] 전체개수 쿼리 한번으로 구하기 - SQL_CALC_FOUND_ROWS
-
limit n offset m 이런식으로도 쓸 수 있나봄
-
웹 개발 페이지 처리(Paging) 방법 - 성능을 고려해보자
참고
'Programming > DB' 카테고리의 다른 글
웹 기반 ERD 툴 (0) | 2017.09.25 |
---|