출처2 : https://blog.naver.com/hschoi82/20050239561
2018/07/24 - [프로그램 자료/MySQL & MariaDB] - [MySQL & MariaDB] 동적 프로시저 dynamic procedure
SQL_CALC_FOUND_ROWS 키워드와 FOUND_ROWS() 함수를 이용하여 Limit를 제외한 Select 문장의 전체 로우 수를 캐쉬에 저장하는 방법이다.
MYSQL 매뉴얼에선 일반적인 방법으로 조회를 2번 하는것보다빠르다고 한다.
실제로 테스트 해보면 캐쉬 사용 문제로 더 느릴수도 있다고 한다.
기본 베이스는 아래와 같다.
SELECT SQL_CALC_FOUND_ROWS *
FROM tabaleName
LIMIT 0, 10;
SELECT FOUND_ROWS();
다음은 동적쿼리로 사용시 샘플이다.
DELIMITER $$
USE `demoDB`$$
DROP PROCEDURE IF EXISTS proc_name$
CREATE DEFINER='userId'@'%' PROCEDURE proc_name
(
in pOffset int,
in pSize int,
out totalCount int
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '테스트 프로시저'
BEGIN
SET @pOffset := IFNULL(pOffset, 0);
SET @pSize := IFNULL(pSize, 10);
SET @Sql = "";
SET @Sql = CONCAT(@Sql, CHAR(10),"select SQL_CALC_FOUND_ROWS * ");
SET @Sql = CONCAT(@Sql, CHAR(10),"from tableName");
SET @Sql = CONCAT(@Sql, CHAR(10),"limit ?,?");
#select @Sql;
PREPARE dquery FROM @Sql;
EXECUTE dquery USING @pOffset, @pSize;
SET totalCount := FOUND_ROWS();
END$$
DELIMITER ;