gpt4 book ai didi

mysql - 使用mysql数据库中的日期代替ID

转载 作者:行者123 更新时间:2023-11-29 07:49:59 25 4
gpt4 key购买 nike

使用日期而不是 ID 作为主要值是否明智?

哪里可以得到更好的搜索mysql数据库性能:

to use timestamp: 1394319600
or to format date and use it as: 09032014

09032014 = 1394319600 = 9.Mart 2014

最佳答案

您可能不应该首先使用日期时间类型的数据字段作为主键。我建议使用自动递增整数字段来保证唯一性。

现在,对于日期时间/时间戳字段本身,对这些列使用 native 日期时间或时间戳数据类型几乎总是更好,而不是使用字符串表示形式,例如 unix 时间戳或其他格式化日期字符串。

为什么?因为当人们将时间戳数据放入数据库时​​,他们通常会想要针对该数据运行查询。如果您以非 native 日期时间格式存储数据,则通常需要将其转换为此类格式,然后才能在此类查询中使用的典型日期/时间函数中使用它。这通常意味着您失去了利用字段上的任何索引进行查询的能力。

例如,假设您想要运行查询来查看当天的所有记录。使用 unix 时间戳字段,查询可能如下所示:

SELECT * FROM table
WHERE FROM_UNIX_TIMESTAMP(timestamp_field)
BETWEEN CONCAT(CURRENT_DATE(), ' 00:00:00') AND CONCAT(CURRENT_DATE(), ' 23:59:59')

而如果提交日期时间/时间戳,则看起来像:

SELECT * FROM table
WHERE timestamp_field
BETWEEN CONCAT(CURRENT_DATE(), ' 00:00:00') AND CONCAT(CURRENT_DATE(), ' 23:59:59')

此处,在第一个查询中的 WHERE 条件左侧使用 FROM_UNIX_TIMESTAMP() 的简单要求阻止了索引的使用,因为 FROM_UNIX_TIMESTAMP(timestamp_field) 确实如此如果索引正确,则不会像 timestamp_field 那样存在于内存中。这意味着您现在需要进行全表扫描来执行该查询。如果您有一个很大的表,这可能会产生很大的问题。

关于mysql - 使用mysql数据库中的日期代替ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739714/

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