3

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

我的 php 时区是UTC

所以我应该使用$time = time()插入值还是UNIX_TIMESTAMP()很好。

4

3 回答 3

1

时间()

time - 返回当前的 Unix 时间戳

UNIX_TIMESTAMP()

如果不带参数调用,则返回 Unix 时间戳(自 '1970-01-01 00:00:00' UTC 以来的秒数)作为无符号整数。

在我看来,它们是一样的。所以我非常怀疑是否会有足够明显的差异来保证选择一个而不是另一个只是为了优化。我的建议是选择使您的代码更易于阅读和理解的那个。MySQL 可以一次处理大量的操作,因此获取时间戳等微不足道的操作几乎是瞬间完成的。

于 2013-02-14T04:34:23.283 回答
1

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

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

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

  2. 对于所有其他,选择你喜欢的任何东西。

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

SET @time = UNIX_TIMESTAMP();
PREPARE stmt FROM 'INSERT INTO mytable VALUES (@time)';
EXECUTE stmt;
EXECUTE stmt;
EXECUTE stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2013-02-14T04:39:17.347 回答
0

如果您要插入十亿行并且要花一整天的时间来插入它,并且您真的很想避免时间戳成为问题,请询问数据的来源是否可以插入所有数据具有相同时间戳的行。然后使用单代时间戳,将其放入变量中,并将其用于所有插入语句作为值。这样您每次插入时运行的代码更少。但这取决于数据属于谁,如果他们对此感到满意:)

于 2013-02-14T06:44:28.987 回答