MySQL
์ค๋์ MySQL์ ๋ด๋ถ์ ์ผ๋ก ๋ด์ฅ๋์ด ์๋ ํจ์(Built-inํจ์)๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํด์
MySQL์ Built-in ํจ์ ์ค์๋ ํ์ฌ ๋ ์ง ๋ฐ ์๊ฐ ์ ๋ณด๋ฅผ ๋ฐํํ๋ ํจ์๊ฐ SYSDATE()์ NOW() ์ด๋ ๊ฒ 2๊ฐ๊ฐ ์์ด์
SYSDATE()์ NOW()์ ์๋ ๋ฐฉ์์ ์ฟผ๋ฆฌ์ ์คํ ๊ณํ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ๋๋ก ์ํฅ๋ ฅ์ด ์ปค์
1. MySQL ๋ฉ๋ด์ผ
SYSDATE() returns the time at which it executes. This differs from the behavior for NOW(), which returns a constant time that indicates the time at which the statement began to execute. (Within a stored function or trigger, NOW() returns the time at which the function or triggering statement began to execute.) mysql> SELECT NOW(), SLEEP(2), NOW(); +---------------------+----------+---------------------+ | NOW() | SLEEP(2) | NOW() | +---------------------+----------+---------------------+ | 2017-11-28 14:52:34 | 0 | 2017-11-28 14:52:34 | +---------------------+----------+---------------------+ mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE(); +---------------------+----------+---------------------+ | SYSDATE() | SLEEP(2) | SYSDATE() | +---------------------+----------+---------------------+ | 2017-11-28 14:52:43 | 0 | 2017-11-28 14:52:45 | +---------------------+----------+---------------------+ | cs |
๋ฉ๋ด์ผ์๋ ์์ธํ ๋์ ์๋ฏ์ด SYSDATE() ํจ์๋ ํธ๋์ ์ ์ด๋ ์ฟผ๋ฆฌ ๋จ์์๋ ์ ํ ์๊ด์์ด ๊ทธ ํจ์๊ฐ ์คํ๋๋ ์์ ์ ์๊ฐ์ ๋ฐํํด์ค์
๋ฐ๋ฉด์ NOW()๋ ํ๋์ ์ฟผ๋ฆฌ ๋จ์๋ก ๋์ผํ ์๊ฐ์ ๋ฐํํด์ ์ฆ, ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ์๋ค๊ณ ํ์ ๋
SELECT fd1, fd2, fd3 FROM tab1 WHERE fd_dt > SYSDATE(); | cs |
๋ง์ฝ, ์ด ํ ์ด๋ธ์ด ๋ ์ฝ๋๊ฐ ๋๋ฌด ๋ง์์ ์ฒ์ ๋ ์ฝ๋๋ถํฐ ๋๊น์ง ์ค์บํ๋๋ฐ 1์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๋ฉด, ์ฒ์ ๋ ์ฝ๋๋ฅผ ๋น๊ตํ ๋์๋ SYSDATE()์ ๋ฐํ๊ฐ์ด '2017-11-28 00:00:00' ์ด์๋ค๋ฉด
๋ง์ง๋ง ๋ ์ฝ๋๋ฅผ ๋น๊ตํ ๋์๋ SYSDATE()์ ๋ฐํ๊ฐ์ '2017-11-28 01:00:00' ๊ฐ ๋์ด ์ฒซ๋ฒ์งธ ๋ ์ฝ๋์ ๋ง์ง๋ง ๋ ์ฝ๋์ ๋น๊ต ์์ ์ด ๋ฌ๋ผ์ ธ์!!
ํ๋ง๋๋ก NOW()์ ๋ฐํ๊ฐ์ ์์์ด์ง๋ง SYSDATE()์ ๋ฐํ๊ฐ์ ์์๊ฐ์ด ์๋๊ฑฐ์์
์ด๋ ๊ฒ๋๋ฉด ์ฟผ๋ฆฌ ์คํ ๊ณํ์ด ๋ฐ๋๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋๋ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์์!
2. ์์
CREATE TABLE user ( id mediumint(9) NOT NULL AUTO_INCREMENT, name varchar(20) DEFAULT NULL, age tinyint(3) unsigned DEFAULT NULL, sex enum('MALE','FEMALE') DEFAULT NULL, regdt datetime NOT NULL, PRIMARY KEY (id), KEY ix_regdt (regdt) ) ENGINE=InnoDB; | cs |
mysql> explain select * from user where regdt>now(); +----+-------------+-------+-------+----------+---------+------+------+ | id | select_type | table | type | key | key_len | ref | rows | +----+-------------+-------+-------+----------+---------+------+------+ | 1 | SIMPLE | user | range | ix_regdt | 8 | NULL | 1 | +----+-------------+-------+-------+----------+---------+------+------+ 1 row in set (0.00 sec) mysql> explain select * from user where regdt>sysdate(); +----+-------------+-------+------+------+---------+------+------+ | id | select_type | table | type | key | key_len | ref | rows | +----+-------------+-------+------+------+---------+------+------+ | 1 | SIMPLE | user | ALL | NULL | NULL | NULL | 4822 | +----+-------------+-------+------+------+---------+------+------+ 1 row in set (0.00 sec) | cs |
SYSDATE()๋ ๋น๊ต๋๋ ์นผ๋ผ์ ์ธ๋ฑ์ค๊ฐ ์ค์ ๋์ด ์๋ ์ง ์๋ ์ง ์๊ด์์ด Full-Table-Scan์ ํ ์ ๋ฐ์ ์๋ ๊ตฌ์กฐ์์
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ SYSDATE() ์ฌ์ฉ ๊ธ์ง ๋๋ --sysdate-is-now ์ต์ ์ ์ค์ ํ์ฌ MySQL Server๋ฅผ ๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ด ์์ด์
์ด๋ ๊ฒ MySQL์ SYSDATE()์ NOW()์ ์ฐจ์ด์ ์ ์ ๋ฆฌํด๋ดค์ด์~
์ถ์ฒ : http://intomysql.blogspot.kr/2010/12/sysdate-now.html