Sql 按时间戳日期分组

Sql 按时间戳日期分组,sql,mysql,group-by,aggregate-functions,Sql,Mysql,Group By,Aggregate Functions,如何在mysql中按时间戳列的日期部分分组,并且仍然利用该列上的索引 当然,您可以使用以下解决方案: select date(thetime) from mytable group by date(thetime) 但是,此查询将无法在时间上使用索引,而是需要一个临时表,因为在按列分组之前,您正在使用函数转换列 +----+-------------+-------------+-------+---------------+-------------+---------+------+---

如何在mysql中按时间戳列的日期部分分组,并且仍然利用该列上的索引

当然,您可以使用以下解决方案:

select date(thetime) from mytable group by date(thetime)
但是,此查询将无法在时间上使用索引,而是需要一个临时表,因为在按列分组之前,您正在使用函数转换列

+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+
| id | select_type | table       | type  | possible_keys | key         | key_len | ref  | rows  | Extra                                        |
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+
|  1 | SIMPLE      | mytable     | index | NULL          | thetime     | 4       | NULL | 48183 | Using index; Using temporary; Using filesort | 
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+

理论上,它没有理由不能对该列上的索引使用范围扫描,也不需要临时表。是否有任何语法可以说服查询优化器执行查询以实现此目的?

据我所知,数据库已经完成了您想要的任务?正在扫描索引(而不是表本身),这在xplan中很明显


但您无法回避这样一个事实,即在分组(distinct)操作期间需要一个中间表来保存日期。

据我所知,数据库已经满足了您的要求了吗?正在扫描索引(而不是表本身),这在xplan中很明显


但是,您无法回避这样一个事实,即在分组(distinct)操作期间需要一个中间表来保存日期。

如果不使用函数对索引列进行变异,则并不总是需要一个临时表来执行group by。如果有一个操作符而不是函数来截断时间部分,它可能work@x:嗯,我想我们都是对的。只要没有应用聚合函数,就可以(理论上)通过遍历索引获得不同值的列表,只保留以前的输出值进行比较。在执行计数/求和等操作时,需要保留所有值,直到分组操作结束。问题是:这是在数据库中实现的吗?:)如果不使用函数对索引列进行变异,则并不总是需要临时表来对其执行GROUPBY。如果有一个操作符而不是函数来截断时间部分,它可能work@x:嗯,我想我们都是对的。只要没有应用聚合函数,就可以(理论上)通过遍历索引获得不同值的列表,只保留以前的输出值进行比较。在执行计数/求和等操作时,需要保留所有值,直到分组操作结束。问题是:这是在数据库中实现的吗?:)