본문 바로가기

개발 관련 지식/MySQL

[MySQL] MySQL 날짜함수 sysdate() 와 now()의 차이점

* MySQL 날짜함수 sysdate() 와 now()의 차이점

 

안녕하세요 송군함대입니다~!^-^/

요즘 MySQL에 대해 공부하게 되면서 조금씩 포스팅을 하게 되었는데요~!

모두에게 조금씩이나마 도움이 되길 바라며, 이글을 끄적여봅니다^-^;;

이번에 설명드릴 내용은 MySQL에서 제공하는 날짜함수 중 현재시각을 구하기 위한 sysdate()와 now() 함수의 차이점입니다^-^

 

두 함수는 모두 현재 시각을 반환해주는 공통점이 있습니다.

하지만 똑같은 함수가 두개나 존재할 필요는 없겠지요?!!

SQL문에서 호출되는 시점에 따라 결과가 서로 다르게 나타나게 됩니다~!!

한번 예문으로 살펴보도록 하겠습니다~!^-^

 

ex) select now(), sysdate(), sleep(10), now(), sysdate();

 

 

위의 결과에서 보듯이 중간에 sleep(1)을 주었습니다~!

now()와 sysdate()의 차이가 보이시나요?!!

now()는 sleep(10)이 중간에 있음에도 불구하고 동일한 시간대를 보여주지만,

sysdate()는 10초 후의 시간을 반환해주는 것을 볼 수 있습니다~!

차이점을 알았으니, 해당 차이점에 따른 사용방법에 대해 알아보아야겠지요?!!

 

sysdate()함수를 사용하면서 발생할 수 있는 문제점이 몇가지 존재합니다.

이중화를 통해 다중으로 DB를 구성할 시(Master/Slave) Master와 Slave 간에 시간이 다르게 표시될 수 있습니다.

sysdate() 컬럼 비교시 index의 사용이 되지 않고 Full Table Scan으로 실행됩니다.

 

위의 문제점을 해결하기 위해서는 sysdate()의 이러한 점을 잘 고려해서 사용해야겠지요?!!

되도록이면 sysdate() 대신 now()를 사용하는 방법도 나쁘지 않을 것 같습니다.

부득이하게 sysdate()를 사용해야 한다면,

mysql 설정에서 -sysdate-is-now 옵션을 설정하여 sysdate()와 now()함수를 동일하게 적용할 수 있습니다~!!

 

이번 포스팅은 이것으로 마치고 다음에는 날짜 함수에 어떤 것들이 있는지도 살펴보도록 하겠습니다~!^-^/