在我的情况下,我只测试哪种日期-时间格式最适合我的查询持续时间。这是我的问题:
SELECT
max(ColumnA), -- bigint
CreateDate,
ColumnB,
EndTime,
ColumnC,
ColumnD,
ColumnE,
ColumnF, -- int
StartTime, -- timestamp or datetime or int - UNIX_TIMESTAMP(StartTime)
ColumnG,
ColumnH,
ColumnI,
ColumnJ,
UpdateDate,
ColumnK FROM TABLE
条件:
-- with indexes
(Iteration 1) WHERE StartTime BETWEEN "2013-01-18 16:50:00" AND "2013-10-18 18:05:00" AND ColumnF in(5428) GROUP BY ColumnF,StartTime
(Iteration 2) WHERE StartTime BETWEEN "2013-05-18 11:00:00" AND "2013-06-23 22:05:00" AND ColumnF in(5428) GROUP BY ColumnF,StartTime
(Iteration 3) WHERE StartTime BETWEEN "2013-08-18 11:00:00" AND "2013-08-23 22:05:00" AND ColumnF in(7752) GROUP BY ColumnF,StartTime
(Iteration 4) WHERE StartTime BETWEEN "2013-01-18 16:50:00" AND "2013-10-18 18:05:00" AND ColumnF in(5428,5675,444) GROUP BY ColumnF,StartTime
(Iteration 5) WHERE StartTime BETWEEN "2013-09-01 16:50:00" AND "2013-09-15 18:05:00" AND ColumnF in(5428,5675,444) GROUP BY ColumnF,StartTime
-- and same without indexes
测试信息:
Count = 400K
Engine version = 5.6.10
DBEngine = InnoDB
Tests procedure - MySQL restart before any query.
结果:
With index on StartTime, with index on ColumnF
Iteration 1 2 3 4 5
timestamp 0.094 0.094 0.124 0.124 0.125
datetime 0.125 0.109 0.141 0.156 0.156
int 0.125 0.124 0.094 0.156 0.156
Rows 38 8 1 128 8
Without index on StartTime, with index on ColumnF
Iteration 1 2 3 4 5
timestamp 0.078 0.062 0.062 0.109 0.125
datetime 0.078 0.078 0.078 0.140 0.125
int 0.078 0.078 0.078 0.140 0.125
Rows 38 8 1 128 8
所以我决定使用没有索引的时间戳(但没有索引的结果看起来非常相似)。
编辑:我真的不知道为什么我决定只使用一个查询。也许是懒惰,也许我不应该在星期天工作:)现在测试无关紧要,结论是错误的。我重写了所有的测试信息,当我进行测试时。。。正常:)
第2版:固定
有一天,我问了一个问题,关于我们什么时候选择Datetime而不是Timestamp。我认为,使用整数时间戳,你不会获得很多时间。此外,请记住如果使用PostgreSQL,则只有TIMESTAMP
和DATETIME
是MySQL中的别名,TIMESTAMP
。所以在这里,你的测试似乎是无意义的。
编辑:它们是而不是等价的。它们只是以相同的方式格式化。事实上,Timestamp
只是一种时区不敏感类型。你该把这件事处理掉。但它会减少定制,并且从1970年到2038年受到限制。如果您有其他日期要存储(早一点或晚一点),您将失败。
有两件事让我这么说:
- 两次迭代
- 无分散度量
- 你测试的每一项内容几乎没有差异
INT
和TIMESTAMP
的最大区别在于在内存中的位置。你没有测试它。观察到的时间跨度真的很短。
我想你猜我完全赞成DateTime而不是integer。