группировать по дате - PullRequest
       19

группировать по дате

1 голос
/ 14 декабря 2010

Как вы можете сгруппировать по части даты столбца отметки времени в 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 | 
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+

Теоретически нет причин, по которым он долженне может использовать сканирование диапазона для индекса в этом столбце и не нуждается во временной таблице.Есть ли синтаксис, который может убедить оптимизатор запросов выполнить запрос, чтобы сделать это?

1 Ответ

1 голос
/ 14 декабря 2010

Из чего я могу понять, что база данных уже делает то, что вы хотите? Индекс сканируется (а не сама таблица), как это видно в xplan.

Но вы не можете обойти тот факт, что промежуточная таблица необходима для хранения дат во время операции группировки (отдельная).

...