将使用UNIX_TIMESTAMP()减慢我的INSERT查询

时间:2013-02-14 04:28:24

标签: php mysql unix-timestamp

我必须一次完成超过20个插入语句。我在那里使用UNIX_TIMESTAMP()在我的时间列中插入了自纪元以来的秒数。

我的php时区是UTC

我应该使用$time = time()来插入值,或UNIX_TIMESTAMP()也可以。

3 个答案:

答案 0 :(得分:1)

time()

  

time - 返回当前的Unix时间戳

UNIX_TIMESTAMP()

  

如果没有参数调用,则返回一个Unix时间戳(从那以后的秒数)   '1970-01-01 00:00:00'UTC)作为无符号整数。

在我看来他们是一回事。所以我非常怀疑是否会有足够的差异来保证选择一个而不仅仅是为了优化。选择哪个使您的代码更容易阅读和理解将是我的建议。 MySQL可以同时处理大量的操作,所以做一些微不足道的事情就像获取时间戳几乎是瞬间的。

答案 1 :(得分:1)

无论您做什么,都会根据功能而非效率来决定;即使有100个插入语句,你甚至可能感觉不到差异。

选择哪个选项取决于您的功能要求:

  1. 如果你必须绝对确定每个语句的值是相同的,你应该“缓存”time()的值并使用它来进行插入;顺便说一句,这可以在MySQL或PHP中完成(见下文)。

  2. 除此之外,选择您喜欢的任何内容。

  3. 如果您要插入多条记录,我希望您能考虑准备好的陈述;这样做实际上可能会以更重要的方式加速插入语句,这主要得益于代码和数据库之间传输的数据量较少。例如:

    SET @time = UNIX_TIMESTAMP();
    PREPARE stmt FROM 'INSERT INTO mytable VALUES (@time)';
    EXECUTE stmt;
    EXECUTE stmt;
    EXECUTE stmt;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

答案 2 :(得分:0)

如果您要插入十亿行并且它将花费您一整天的时间来插入它,并且您真的希望避免时间戳成为问题,请询问数据的用户是否正常如果您插入具有相同时间戳的所有行。然后使用单代的时间戳,将其放在变量中,并将其用于所有插入语句作为值。这样,每次插入都会运行较少的代码。但是如果数据属于它们的话,这取决于数据属于谁:)