gpt4 book ai didi

mysql - 时间戳 vs 日期时间 vs int - 有和没有索引 - 测试

转载 作者:可可西里 更新时间:2023-11-01 08:35:17 26 4
gpt4 key购买 nike

在我的例子中,我只会测试哪种日期时间格式最适合我的查询持续时间。这是我的查询:

   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:固定

最佳答案

有一天我问了一个关于 when we chose Datetime over Timestamp 的问题.我认为你不会用整数时间戳赚很多时间。 此外,请记住 TIMESTAMPDATETIME 是 MySQL 中的别名, 如果您使用 PostgreSQL,您将只有 TIMESTAMP .所以在这里,您的测试似乎无关紧要。

编辑:它们等同。它们只是以相同的方式格式化。事实上 Timestamp 只是一个时区不敏感类型。它让你摆脱这件事。但它会减少您的自定义设置,并且仅限于 1970 年到 2038 年。如果您要存储其他日期(更早或更晚),您将失败。

有两件事让我这么说:

  • 两次迭代
  • 无离散度指标
  • 您测试的所有内容几乎没有区别

INTTIMESTAMP 最大的区别在于内存中的位置。你不测试它。观察到的时间跨度真的很短。

我想你猜我完全赞成 DateTime 而不是整数。

关于mysql - 时间戳 vs 日期时间 vs int - 有和没有索引 - 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14921391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com