날짜검색 시 주의사항

-- MySQL 2013. 6. 18. 18:23
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
대용량의 테이블에서 날짜를 통한 검색을 할 때,

(reg_date는 datetime형이고, 인덱스가 걸려있다고 가정한다.)

SELECT *
FROM    Test
WHERE   date_format(reg_date, '%Y-%m-%d') BETWEEN '2013-01-01' AND '2013-01-31';

SELECT *
FROM    Test
WHERE   date(reg_date) BETWEEN '2013-01-01' AND '2013-01-31';



위와 같이 쿼리를 하면 데이터가 늘어날수록 부하가 걸리는 쿼리가 된다.

- WHERE절의 왼쪽은 가공하지 않는다. (인덱스를 타지 않음)
- BETWEEN 절도 함수이므로 함수는 되도록 쓰지 않는다. 

댓글에도 썼지만 미니어스님의 얘기를 듣고 정정합니다.
BETWEEN절도 댓글의 예처럼 키워드여서 내부에서 약간의 공수가 있는 것 같습니다.


날짜를 검색할 때 올바른 검색방법은 아래와 같다.

SELECT *
FROM    Test
WHERE reg_date >= '2013-01-01'
AND     reg_date < '2013-02-01'


검색속도는 상당히 차이가 난다.


posted by 어린왕자악꿍