Web_developing/Mysql 2006/10/09 10:40
SELECT {...} FROM {테이블} WHERE {조건} LIMIT M, M+N 형식의 문법을 많이들 사용하실텐데.. 전체 결과값을 구하기 위해 LIMIT를 제외한 앞문장에서 {...} 부분에 "COUNT(*)"을 써서 쿼리를 한 번 더 날려서 처리하곤 했습니다. WHERE {조건}을 2번 처리해야 하는 비효율적인 코드를 남발했는데, MySQL 4.0대에서 지원하는 Query Caching 기능의 일부로서 SQL_CALC_FOUND_ROWS가 들어간 문장에 대해 LIMIT와 상관없이 전체 결과값을 버퍼에 저장하고 FOUND_ROWS() 함수로 값을 가져올 수 있습니다. 검색 결과 리스트를 구할 때 아래와 같은 쿼리를 썼다면, SELECT SQL_CALC_FOUND_ROWS CI.cid, CI.sid, CI.ts, CI.perm, CD.title, W.wid, W.name FROM ContentInfo CI LEFT JOIN ContentData CD USING (cid) LEFT JOIN Writer W ON W.wid=CI.wid WHERE INSTR(CD.title, '검색') OR INSTR(CD.body, '검색') ORDER BY CI.ts DESC LIMIT 0, 20 아래와 같이 LIMIT와 상관없는 전체 결과값을 얻을 수 있습니다. SELECT FOUND_ROWS() *주의: InnoDB 타입이 아닌 경우, 또는 동시접속이 많은 곳에서 TRANSACTION과 함께 사용하지 않을 때 제대로 작동할지 여부에 대해서는 아직 알아보지 못했습니다. 다른 데이터 베이스에서는 아직 미지원입니당 ~ 참조 페이지입니다. http://www.mysql.com/doc/en/Query_Cache_How.html http://www.mysql.com/doc/en/SELECT.html |
이 글에는 트랙백을 보낼 수 없습니다
0