티스토리 뷰

 

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

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2025/01   »
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
글 보관함