티스토리 뷰
MySQL에 제공하는 시간을 반환하는 함수에는 SYSDATE(), NOW() 두 가지 있다. 종종 오라클에서 제공하는 SYSDATE와 같은 기능으로 생각하고 SYSDATE()를 사용하는 분도 있다. 하지만 이 두 가지 함수에는 차이가 있다.
둘 다 현재 날짜 값을 가지고 오지만, 현재라는 기준이 다르다.
이 차이는 쿼리의 실행계획에 상당한 영향을 미칠 정도로 영향력이 있다. 아래 예제에서 확인해보자.
SELECT NOW() AS NOW_START
, SLEEP(1)
, NOW() AS NOW_END
, SYSDATE() AS SYSDATE_START
, SLEEP(1)
, SYSDATE() AS SYSDATE_END;
NOW()와 SYSDATE() 차이를 확인하기 위해 쿼리문 SLEEP()을 주어보았다.
- NOW_START 사이에 1초 딜레이가 있지만 NOW_END는 같은 시간을 반환한다.
- SYSDATE_START는 NOW() 사이에 있던 SLEEP()에도 영향을 받았으며, SYSDATE_END는 SYSDATE() 사이에 있는 SLEEP()에도 영향을 받았다.
즉, NOW()는 쿼리가 수행되는 시간에 고정이지만, SYSDATE()는 함수 호출할 때마다 시간이 변한다. 이런 차이는 쿼리문이 길거나 중간중간 현재 날짜를 가져와야 한다는 경우에는 서로 다른 시간 때가 나올 가능성이 있다. 다른 시간 때를 구하는 게 아니라면 NOW()를 사용해야 한다.
위와 같은 차이를 방지하기 위해서는 MySQL 내 옵션을 통해 SYSDATE()와 NOW()가 동일하게 동작하게 설정이 가능하다.
--sysdate-is-now (기본값 false) 옵션이 있다.
해당 옵션을 true로 설정하면 SYSDATE()는 NOW()와 동일하게 동작하게 된다.
dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_sysdate-is-now
'데이터베이스 > SQL' 카테고리의 다른 글
[SQL] Mybatis를 활용한 페이징 (0) | 2021.01.22 |
---|---|
[SQL] WHERE 1=1 의미 (0) | 2021.01.20 |
[SQL] MySQL 하위에서 상위 찾기 (WITH RECURSIVE) (0) | 2021.01.15 |
[SQL] MySQL 주차 구하기 WEEK (0) | 2020.09.17 |
[SQL] MySQL 날짜 요일 구하기 및 주의사항 (0) | 2020.09.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
TAG
- React
- 오라클 내장 함수
- 프로그래머
- 자바
- 개발환경
- 소프트웨어공학
- 리액트
- 이직
- SQL
- 제주도 3박4일 일정
- 자바스크립트
- effective java
- 정렬 알고리즘
- 프로그래머스
- 회고
- 리눅스 명령어
- Linux 명령어
- 오라클
- Maven
- 리액트 16
- 제주도 여행
- 성능분석
- spring
- Eclipse
- javascript
- 경력관리
- sort algorithm
- Collection
- Java
- Tomcat
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함