如何在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 |
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+
理论上,它没有理由不能对该列的索引使用范围扫描而不需要临时表。是否有任何语法可以说服查询优化器执行查询来执行此操作?
答案 0 :(得分:1)
据我所知,数据库已经做了你想要的?正在扫描索引(而不是表格本身),如xplan中所示。
但是你无法解决在分组(不同)操作期间需要一个中间表来保存日期的事实。