티스토리 뷰
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
MySQL :: MySQL 5.7 Reference Manual :: 5.1.6 Server Command Options
5.1.6 Server Command Options When you start the mysqld server, you can specify program options using any of the methods described in Section 4.2.2, “Specifying Program Options”. The most common methods are to provide options in an option file or on t
dev.mysql.com
'데이터베이스 > 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 |
- javascript
- 프로그래머
- 자바
- 오라클 내장 함수
- 이직
- React
- effective java
- 리액트
- 자바스크립트
- Eclipse
- Tomcat
- 리액트 16
- spring
- Java
- Maven
- 제주도 3박4일 일정
- sort algorithm
- 리눅스 명령어
- 성능분석
- Collection
- Linux 명령어
- 회고
- 정렬 알고리즘
- 제주도 여행
- 프로그래머스
- 개발환경
- 소프트웨어공학
- SQL
- 경력관리
- 오라클
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |