mysql - WHERE 子句中 DATE 和 DATETIME 的区别

标签 mysql sql

比方说,我有一张 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_datea_datetime

我的问题是,当我想返回按 a_date 分组的每个 id_actionCOUNT() 时,是否相同,当我使用这两个选择,还是速度不同?感谢您的任何解释。

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/

相关文章:

java - 简单查询时出现 SQL、JDBC "Invalid column index"错误

php - 在MYSQL中选择相关行但不限制基于WHERE子句的结果

c# - 从 ASP.Net NULL 值输入到 MySQL

python - 使用 MySQLdb 多次执行

mysql使用来自另一个表的关系按列从表中排序数据

mysql - NOW() 函数的正确语法是什么

sql - 获取 PostgreSQL 数据库中的分区数

MySQL - 存储大于 1 且有大量小数位的数字

php - 获取表前缀

sql - postgres 中的 connect_by_root 等价物