比方说,我有一张 table :
+------------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-----------+------+-----+-------------------+-----------------------------+
| id | int(10) | NO | PRI | | AUTOINCREMENT |
| id_action | int(10) | NO | IDX | | |
| a_date | date | NO | IDX | | |
| a_datetime | datetime | NO | IDX | | |
+------------+-----------+------+-----+-------------------+-----------------------------+
每一行都有一些id_action
,以及在网站上执行的a_date
和a_datetime
。
我的问题是,当我想返回按 a_date
分组的每个 id_action
的 COUNT()
时,是否相同,当我使用这两个选择,还是速度不同?感谢您的任何解释。
SELECT COUNT(id_action), id_action, a_date
FROM my_table
GROUP BY a_date
ORDER BY a_date DESC
和
SELECT COUNT(id_action), id_action, DATE_FORMAT(a_datetime, '%Y-%m-%d') AS `a_date`
FROM my_table
GROUP BY DATE_FORMAT(a_datetime, '%Y-%m-%d')
ORDER BY a_date DESC
换句话说,我的问题是,每个操作都有它的datetime
,如果我真的需要列a_date
,或者使用DATE_FORMAT 也是一样的
函数和列 a_datetime
而我不需要列 a_date
?
最佳答案
我在 MySQL 5.5 上的相似表上运行了这两个查询。
该表有 10634079 行。
第一个开始时用了 10.66,之后的尝试总是需要大约 10 秒。
Seconds 查询第一次执行需要 1.25 分钟,第二次、第三次....尝试花费 22.091 秒
所以在我看来,如果您正在寻找性能,那么您必须有 a_date 列,因为它在没有 Date_Format 的情况下执行时花费了一半的时间。
如果性能不是首要考虑因素(例如数据冗余可能是),那么 a_datetime 列将用于所有其他与日期/日期时间相关的目的。
关于mysql - WHERE 子句中 DATE 和 DATETIME 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27357311/