RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
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
2006/10/09 10:40 2006/10/09 10:40
이 글에는 트랙백을 보낼 수 없습니다
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
  1. 2016/01 (1)
  2. 2015/12 (3)
  3. 2015/10 (3)
  4. 2015/03 (2)
  5. 2015/01 (4)