【发布时间】:2011-03-19 22:24:59
【问题描述】:
我正在阅读一篇文章,该文章展示了一些非常好的信息和基准,说明了三种不同的 MySQL 日期/时间存储选项的性能。
MySQL DATETIME vs TIMESTAMP vs INT performance and benchmarking with MyISAM
在阅读本文时,您开始意识到使用 int 只是一种浪费,您应该改用 MySQL Datetime 或 Timestamp 列类型。
然而,在文章的最后,他又做了一个不使用 MySQL 函数的测试,您突然发现,在通过 unix 时间戳搜索时,直接 INT 的速度是两个 MySQL 选项的 2 倍。
所以我突然明白了 - 呃,PHP 应用程序都使用什么? time()! 几乎每个 php 应用程序的逻辑都基于 Unix 纪元。这意味着在特定时间对结果的大多数查询都是基于 time()开始的,然后被转换为使用 MySQL 的字段。
这给我留下了以下内容:
存储为 INT 的 Unix 时间戳是 更快,占用更少空间和工作 原生基于 PHP 的 time() 计算。
MySQL 日期类型更适合 来自 MySQL 的操作和逻辑 一边。
暂时 Unix 和 MySQL 时间戳只工作到 2037 这意味着您必须使用 较大日期的日期时间字段 未来。
date = NOW()等 MySQL 命令在以下情况下可能会滞后 使用复制导致数据不一致。
因此,将其应用到现实生活中,我们会看到答案 鉴于大多数真正的 DBA 会使用像 PostgreSQL 这样更好的引擎,这些结果 - 有没有 arny
但是,大多数使用数据库逻辑级别的应用程序可能会使用 PostgreSQL。这意味着我们所有其他程序员只将 MySQL 用作我们数据的存储罐(你知道这是真的),这使得字段保持小而快,UNIX INT 看起来就像它实际上是最佳选择。
那你们觉得呢?
时间戳真的比 MySQL 日期字段更适合 PHP 应用程序吗?
【问题讨论】:
-
我不喜欢 int 时间戳,因为在临时查询中读取它们很困难。
-
我敢肯定,在 2038 年之前,64 位平台的市场渗透率会更高。 (使用
time_t,而不是int,用于存储Unix 时间。) -
对于临时查询,如果您有一个 int 时间戳,只需在日期执行
from_unixtime().. -
我敢肯定,在 2038 年之前,1024 位平台的市场渗透率将会更高。