문제를 쉽게 해결하기 위해 MySQL로부터 더 많은 정보를 얻는 기법들
MySQL 만의 기능들을 항상 주석처리함으로써 쿼리의 이식성 높일 수 있다.
SELECT /*! SQL_BUFFER_RESULTS */ ...
SELECT SQL_BUFFER_RESULTS ...
MySQL이 임시 결과 세트를 만들도록 강제한다. 임시 세트가 만들어지면, 그 테이블들에 대한 모든 잠금이 해제된다. 이는 테이블 잠금으로 인해 문제가 발생했을 때나 쿼리 결과를 클라이언트로 전송하는데 오랜 시간이 소요되는 경우에 도움이 된다.
SELECT SQL_SMAIL_RESULT ... GROUP BY ...
결과 세트가 적은 수의 레코드만 가지게끔 하도록 옵티마이저에게 지시한다.
SELECT SQL_BIG_RESULT ... GROUP BY ...
결과 세트가 많은 수의 레코드를 가지도록 옵티마이저에게 지시한다.
SELECT STRAIGHT_JOIN ...
옵티마이저가 FROM 절에 나타난 순서대로 테이블을 join 하도록 강제한다.
SELECT ... FROM table_name [USE INDEX (index_list) | IGNORE INDEX (index_list)] table_name2
MySQL이 특정 인덱스들을 사용하거나 무시하도록 강제한다.
SQL_CALC_FOUND_ROWS
limit 절 이전단계의 값을 알고 싶을 경우에
SQL_CALC_FOUND_ROWS 를 사용하면 편리합니다.
member 테이블의 전체 갯수는 11,133개 인데 limit 조건절을 준 후 FOUND_ROWS()는 limit 값만큼
만 나오지만 select 절에 SQL_CAL_FOUND_ROWS 구문을 넣으면 전체 행이 출력됩니다.
mysql> select * from member limit 0,200;
mysql> select FOUND_ROWS();
+--------------+
| Found_Rows() |
+---------------+
| 200 |
+--------------+
1 row in set (0.00 sec)
mysql> select SQL_CALC_FOUND_ROWS * from member limit 0,200;
mysql> select FOUND_ROWS();
+--------------+
| Found_Rows() |
+---------------+
| 11133 |
+--------------+
1 row in set (0.00 sec)
'프로그래밍 > mysql' 카테고리의 다른 글
mysql - 테이블 잠금(LOCK TABLES)의 단점 보완방법 (0) | 2012.07.19 |
---|---|
mysql - 테이블 단위 replication (0) | 2012.07.19 |
mysql - 처리 함수 종합 (0) | 2012.07.19 |
mysql - 2개의 테이블 간 (교, 합, 차집합) 구하기 (0) | 2012.07.19 |
mysql - 자동증가(auto_increment) (0) | 2012.07.19 |