如何智能地将日期用作主要值而不是ID?
我可以更好地搜索mysql数据库的性能:
to use timestamp: 1394319600
or to format date and use it as: 09032014
09032014 = 1394319600 = 9.Mart 2014
答案 0 :(得分:2)
您可能不应该使用日期时间类型的数据字段作为主键开头。我建议使用自动增量整数字段来保证唯一性。
现在关于datetime / timestamp字段本身,对这些列使用本机日期时间或时间戳数据类型几乎总是更好,而不是字符串表示,如unix时间戳或其他格式化日期字符串。
为什么呢?因为当人们将时间戳数据放入他们的数据库库时,他们通常会想要针对该数据运行查询。如果以非本机日期时间格式存储数据,则通常需要将其转换为这种格式,然后才能在此类查询中使用的典型日期/时间函数中使用它。这通常意味着您无法利用字段上的任何索引进行查询。
例如,假设您要运行查询以查看当天的所有记录。使用unix timestamp字段,查询可能如下所示:
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
如果索引正确。这意味着您现在需要执行全表扫描来执行该查询。如果你有一张大桌子,这可能会有问题。