【发布时间】:2011-04-22 14:59:40
【问题描述】:
所以,我有一个表,其中“ABC”列是时间戳,“BCD”是日期时间。
如果我这样做:
SELECT * FROM myTable WHERE ABC > BCD
不好吗?会影响性能吗?
它们在性能方面的比较如何?
【问题讨论】:
所以,我有一个表,其中“ABC”列是时间戳,“BCD”是日期时间。
如果我这样做:
SELECT * FROM myTable WHERE ABC > BCD
不好吗?会影响性能吗?
它们在性能方面的比较如何?
【问题讨论】:
是的,您可以将datetime 与timestamp 进行比较。这还不错,但请注意以下几点:
请记住,尽管
DATETIME、DATE和TIMESTAMP值都可以使用相同的格式集指定,但这些类型的值范围并不相同。例如,TIMESTAMP值不能早于1970 UTC或晚于'2038-01-19 03:14:07'UTC。这意味着像
'1968-01-01'这样的日期虽然作为DATETIME或DATE值是合法的,但作为TIMESTAMP值是无效的并且被转换为0。
来自MySQL Reference Manual :: The DATETIME, DATE, and TIMESTAMP Types。
注意以下测试用例如何正常工作:
CREATE TABLE t1 (d1 datetime, d2 timestamp);
INSERT INTO t1 VALUES ('1968-01-01 00:00:00', '1980-01-01 00:00:00');
INSERT INTO t1 VALUES ('2040-01-01 00:00:00', '1980-01-01 00:00:00');
SELECT * FROM t1 WHERE d2 < d1;
+---------------------+---------------------+
| d1 | d2 |
+---------------------+---------------------+
| 2040-01-01 00:00:00 | 1980-01-01 00:00:00 |
+---------------------+---------------------+
1 row in set (0.00 sec)
SELECT * FROM t1 WHERE d2 > d1;
+---------------------+---------------------+
| d1 | d2 |
+---------------------+---------------------+
| 1968-01-01 00:00:00 | 1980-01-01 00:00:00 |
+---------------------+---------------------+
1 row in set (0.00 sec)
SELECT * FROM t1 WHERE d2 < '2040-01-01 00:00:00';
+---------------------+---------------------+
| d1 | d2 |
+---------------------+---------------------+
| 1968-01-01 00:00:00 | 1980-01-01 00:00:00 |
| 2040-01-01 00:00:00 | 1980-01-01 00:00:00 |
+---------------------+---------------------+
2 rows in set (0.00 sec)
SELECT * FROM t1 WHERE d2 > '2040-01-01 00:00:00';
Empty set (0.00 sec)
【讨论】: