알이즈웰

[MySql] SQL_CALC_FOUND_ROWS, FOUND_ROWS() 본문

Programming/DB

[MySql] SQL_CALC_FOUND_ROWS, FOUND_ROWS()

2018. 11. 28. 11:10

*

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을 할 것이니 그것을 감안하고 사용하라는 조언도 해주었다.


위 글에서 포함되어있는 해당 힌트의 기본적인 동작은

mysqlkorea

여기를 참고하라고 한다.



-

[MYSQL] 전체개수 쿼리 한번으로 구하기 - SQL_CALC_FOUND_ROWS



-

MySQL에서 페이징 쿼리 구현


limit n offset m 이런식으로도 쓸 수 있나봄



-

웹 개발 페이지 처리(Paging) 방법 - 성능을 고려해보자


참고











'Programming > DB' 카테고리의 다른 글

웹 기반 ERD 툴  (0) 2017.09.25
Comments