Mysql UNIX_TIMESTAMP()是否为大型插入查询计算一次?

Mysql UNIX_TIMESTAMP()是否为大型插入查询计算一次?,mysql,insert,innodb,unix-timestamp,large-query,Mysql,Insert,Innodb,Unix Timestamp,Large Query,我做了个测试。以下是innodb表: CREATE TABLE `test_UNIX_TIMESTAMP` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `datefrom` INT(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) 这是一个插页: insert into test_UNIX_TIMESTAMP (datefrom) values (UNIX_TIMESTAMP()) ,(UNIX_TIMEST

我做了个测试。以下是innodb表:

CREATE TABLE `test_UNIX_TIMESTAMP` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `datefrom` INT(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
)
这是一个插页:

insert into test_UNIX_TIMESTAMP (datefrom) values
(UNIX_TIMESTAMP())
,(UNIX_TIMESTAMP())
,(UNIX_TIMESTAMP())
....many many
,(UNIX_TIMESTAMP());
下面是一个要检查时间戳是否唯一的查询:

select distinct(datefrom) from test_UNIX_TIMESTAMP;
结果是:

After Affected rows: 106 400, we have 1 unique timestamp value in the table.

After Affected rows: 1 170 400 , we still have 1 unique timestamp value in the table.
MySQL服务器-它是远程SQL服务器(xeon 1270v3,32 ram,MySQL有4Gb缓存)


对于大型插入查询,“UNIX_TIMESTAMP()”值是否固定?或者它是固定的会议?或者我只是运气好?

我想这和函数是一样的:

NOW()返回一个常量时间,指示语句开始执行的时间。(在存储的函数或触发器中,NOW()返回函数或触发器语句开始执行的时间。)这与SYSDATE()的行为不同,后者返回函数或触发器执行的确切时间

不幸的是,没有关于此案例的其他函数的特定文档。如果要确保始终具有相同的值,只需使用
UNIX\u TIMESTAMP()
,如

 SELECT UNIX_TIMESTAMP(NOW());

MySQL文档对此并不清楚。但是,它确实区分了
CURRENT\u TIMESTAMP()
(或
NOW()
)和
SYSDATE()
——前者在每次查询时计算一次,而后者在每次调用时计算一次(可能会慢一点)

您可以通过调用
SLEEP
指令的两侧来演示这一点:

mysql> select NOW() "a", SYSDATE() "b", SLEEP(2) "_", NOW() "c", SYSDATE() "d";
+---------------------+---------------------+---+---------------------+---------------------+
| a                   | b                   | _ | c                   | d                   |
+---------------------+---------------------+---+---------------------+---------------------+
| 2015-11-04 11:18:55 | 2015-11-04 11:18:55 | 0 | 2015-11-04 11:18:55 | 2015-11-04 11:18:57 |
+---------------------+---------------------+---+---------------------+---------------------+
1 row in set (2.01 sec)
如您所见,
SYSDATE()
在查询过程中增加,而
NOW()
保持不变。事实证明,
UNIX\u TIMESTAMP()
也会在每个查询中计算一次:

mysql> select UNIX_TIMESTAMP(), SLEEP(2), UNIX_TIMESTAMP();
+------------------+----------+------------------+
| UNIX_TIMESTAMP() | SLEEP(2) | UNIX_TIMESTAMP() |
+------------------+----------+------------------+
|       1446635945 |        0 |       1446635945 |
+------------------+----------+------------------+
1 row in set (2.00 sec)

当你运行插件的时候,它运行了多长时间?它是远程服务器,我使用ADSL。所以1mil行是24Mb的流量,需要00:03:51(发送到服务器并执行)。当我在服务器上看到短时间内的突发iops,我的客户端(heidisql)返回我随时间变化的结果以及受影响的行数后,我不会得出这样的结论,即行为类似于
NOW()
。不过,我很喜欢你的解决方案。也谢谢你的帮助。你帮我找到了一个“检查的好方法”!该死的;)在查看文档之前,我一直在玩这个,但后来不知何故没有想到用
sysdate()
进行演示。干得好,upvote。非常棒的简单例子,谢谢!刚刚试过选择UNIX_TIMESTAMP()“a”,SYSDATE()“b”,SLEEP(2)”,UNIX_TIMESTAMP()“c”,SYSDATE()“d”;时间戳没有改变!