-- MySQL
날짜검색 시 주의사항
어린왕자악꿍
2013. 6. 18. 18:23
대용량의 테이블에서 날짜를 통한 검색을 할 때,
(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 절도 함수이므로 함수는 되도록 쓰지 않는다.
날짜를 검색할 때 올바른 검색방법은 아래와 같다.
SELECT *
FROM Test
WHERE reg_date >= '2013-01-01'
AND reg_date < '2013-02-01'
검색속도는 상당히 차이가 난다.
(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'
검색속도는 상당히 차이가 난다.