게시판 서비스를 만들 때, 페이징 기능은 거의 필수적이라고 볼 수 있습니다.
기능을 구현하기 위해서는 전체 페이지 수가 필요합니다.
SELECT COUNT(*) FROM post;
전체 페이지를 구하는 일반적인 쿼리는 다음처럼 작성할 수 있습니다.
하지만, 게시글도 조회해야 하기 때문에 쿼리를 두 번 사용해야 한다는 문제점이 있습니다.
이번 글은 이러한 문제점을 개선하기 위한 글입니다.
📃 SQL_CALC_FOUND_ROW
쿼리에 LIMIT 옵션을 주면 그 수만큼 레코드를 검색하고 종료합니다.
하지만 SQL_CALC_FOUND_ROW라는 힌트를 주게 되면,
조건에 부합하는 레코드 검색이 끝나더라도 끝까지 검색을 수행합니다.
SELECT SQL_CALC_FOUND_ROWS, * FROM post LIMIT 5 OFFSET 1;
📃 FOUND_ROWS()
MySQL의 내장함수로 이전에 조회한 쿼리의 수를 반환합니다.
SELECT FOUND_ROWS();
힌트를 준 쿼리는 전체 행을 검색했기 때문에 명령을 사용하면 전체 컬럼 수를 반환합니다.
다시 한 번 같은 명령어를 치면 1이 반환됩니다. 가장 직전에 조회한 쿼리의 수를 반환하기 때문이죠.
이번에 준 힌트는 ANSI-SQL 표준 문법을 준수하지 못하기 때문에 권장하지 않는다고 합니다.
전체 레코드를 검색하는만큼 성능의 향상이 아닌 개발자의 편의가 향상된다고 느꼈습니다.
다른 페이징 구현 방법도 찾아봐야겠네요.
글을 끝까지 봐주셔서 감사합니다.
틀린 내용은 댓글로 지적 부탁드립니다.
'DBMS' 카테고리의 다른 글
[SQL] IN 연산자 알아보기 (3) | 2024.10.10 |
---|---|
[SQL] JOIN으로 테이블을 합쳐보자 (0) | 2024.09.20 |
[SQL] Time Zone 설정하기 (0) | 2024.09.13 |
[SQL] 데이터를 내 마음대로, DML (1) | 2024.09.12 |
[RDBMS] 데이터베이스 정규화 (0) | 2024.09.11 |