๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ชฉ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค.

[MySQL] SYSDATE() ์™€ NOW()์˜ ์ฐจ์ด

2017. 11. 28 ๐Ÿ›ข DB/MySQL

    MySQLMySQL



    ์˜ค๋Š˜์€ 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(9NOT NULL AUTO_INCREMENT,
      name varchar(20DEFAULT NULL,
      age tinyint(3unsigned 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