2010년 6월 3일 목요일

쿼리캐쉬로 성능개선

MySQL 쿼리캐쉬는 SELECT문과 그 결과를 기억한다.

SELECT문은 해석되기 전에 쿼리 캐쉬에 기억되어져 있는 것과 비교되어 내용이 같은 경우는 캐쉬에서 결과를 가져온다.

다시말하면, 같은 쿼리가 반복되어 실행되는 환경인 경우 쿼리캐쉬를 적절하게 이용하는 것으로 성능을 개선할 수 있는 것이다.

쿼리캐쉬에 기억되는 쿼리와 일치하기 위해서는 대문자, 소문자차이, 공백등도 포함해 모두 같은 문자열이어야 한다.

또 테이블에 변경이 반영되면 그 테이블에 관하여 캐쉬된 쿼리는 파기되어 버린다.

다음과 같은 경우에는 캐쉬되지 않는다.

  • Prepared Statement로 작성된 쿼리
  • SELECT ... IN SHARE MODE
  • SELECT ... FOR UPDATE
  • SELECT ... INTO OUTFILE ...
  • SELECT ... INTO DUMPFILE ...
  • SELECT * FROM ... WHERE autoincrement_field IS NULL
  • 다음의 함수가 사용된 경우: BENCHMARK(), CONNECTION_ID(), CURDATE(), CURRENT_DATE(), CURRENT_TIME(), CURRENT_TIMESTAMP(), CURTIME(), DATABASE(), ENCRYPT(인수가 한개인 경우), FOUND_ROWS(), GET_LOCK(), LAST_INSERT_ID(), LOAD_FILE(), MASTER_POS_WAIT, NOW(), RAND(), RELEASE_LOCK(), SYSDATE(), UNIX_TIMESTAMP(인수 없음), USER()
  • UDF를 사용하고 있는 경우
  • 사용자 변수를 사용하고 있는 경우
  • 권한 테이블에 관한 SELECT
  • TEMPORARY테이블에 관한 SELECT