일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- LOG
- 가상환경
- ORA-28002
- Python
- 원한
- error
- 명령어
- HMI
- Eclipse
- pythoncom37.dll
- Custom
- checkbox
- DataTables
- build
- geckodriver
- Linux
- STS
- 분노
- Anaconda
- JQuery
- 파이썬
- 맥코트
- 말라키
- 리눅스
- SCADA
- Today
- Total
2010년 5월 1일, 2막
[mysql] datetime 날짜 검색 본문
| MySQL에서 DATETIME 형식의 데이터를 고속으로 검색하기
MYSQL의 UNIX_TIMESTAMP 함수를 이용
INT 형으로 저장하여 DATETIME 형식보다 3 배 ~ 4 배(?) 고속화가능
| Memo
1.DATETIME 형의 경우
-----------------------------------------------------
SELECT * FROM test_datetime
WHERE date between '2013-01-01' and '2013-06-30';
처리 결과 ( 5.20 sec )
2.INT 형의 경우
-----------------------------------------------------
SELECT * FROM test_unixtime
WHERE date_unixtime between 1356966000 and 1372518000;
처리 결과 ( 1.64 sec )
## INT 형식으로 준 쿼리 조건이 데이터 검색 속도가 압도적으로 빠른 결과. ##
////////////////////////////////////////////
(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'
//////////////////////////////////////////////
[1] WHERE절 왼쪽 가공
SELECT *
FROM Test
WHERE date(reg_date) BETWEEN \'2013-01-01\' AND \'2013-01-31\';
<WHERE절의 왼쪽은 가공하지 않는다. (인덱스를 타지 않음)>
select sql_no_cache count(*) from sbtest where id>=0 and id<=83389129;
select sql_no_cache count(*) from sbtest where id between 0 and 83389129;
[x BETWEEN $1 AND $2]= 평균 4.118333 초가 소요
[x>=$1 AND x<=$2] = 평균 3.442857 초가 소요
두 개 쿼리의 실행계획 동일. 모든 데이터가 Buffer pool 에 cache(Warming up)된
상태에서 실행했기 때문에 상태는 거의 동일했다고 보여집니다.
이 두 조건의 처리 속도가 다르게 나왔다는 것은
[x BETWEEN $1 AND $2] 방식의 비교가 [x>=$1 AND x<=$2] 방식의 비교보다
CPU cycle을 적게 소모했다는 결과로 보여집니다.
참고 URL -
http://tokyogoose.tistory.com/304
http://egloos.zum.com/tiger5net/v/5751776
출처: https://devhood.tistory.com/249 [<./>.dev./hood]
'Computer > Tips' 카테고리의 다른 글
[c#] WORKING WITH ASYNCHRONOUS METHODS IN C# (0) | 2020.03.31 |
---|---|
[c#] 시스템 트레이 프로그램 작성 (0) | 2019.08.23 |
[C#] 크로스 스레드와 Control.Invoke (0) | 2019.07.24 |
[DB] EXPLAIN for MariaDB (0) | 2019.07.23 |
[C#] 폼간 데이터 전송 (0) | 2019.07.22 |