首先我要说的是,我已经查看了许多类似的问题,但所有这些问题都Timestamp与DateTime字段类型有关而没有索引.至少这是我的理解.
众所周知,DateTime有一些优势.把它们放在一边了一分钟,并假设表的引擎是InnoDB用10+ million records,它查询将更快地执行时标准基于:
- 带索引的DateTime
- 带索引的int
换句话说,最好将日期和时间存储为DateTimeUNIX时间戳int?请记住,不需要使用任何内置的MySQL函数.
更新
经过MySQL 5.1.41(64位)和1000万条记录的测试,初步测试显示出显着的速度差异int.使用两个表,tbl_dt使用DateTime和tbl_int使用int列.几个结果:
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt`;
+----------+
| COUNT(*) |
+----------+
| 10000000 |
+----------+
1 row in set (2 min 10.27 sec)
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int`;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (25.02 sec)
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt` WHERE …Run Code Online (Sandbox Code Playgroud) Delphi XE2和MySql.
我之前的问题导致我建议我应该使用MySql的本机TIMESTAMP数据类型来存储日期/时间.
不幸的是,我似乎无法找到任何编码示例,而且我得到了奇怪的结果.
鉴于此表:
mysql> describe test_runs;
+------------------+-------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+-------------+------+-----+---------------------+-------+
| start_time_stamp | timestamp | NO | PRI | 0000-00-00 00:00:00 | |
| end_time_stamp | timestamp | NO | | 0000-00-00 00:00:00 | |
| description | varchar(64) | NO | | NULL | |
+------------------+-------------+------+-----+---------------------+-------+
3 rows in set (0.02 sec)
Run Code Online (Sandbox Code Playgroud)
我喜欢:
SELECT CURRENT_TIMESTAMP- 它应该是什么类型的?TSQLTimeStamp?start_time_stamp …