Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго) / 12 сообщений из 12, страница 1 из 1
21.12.2015, 15:14:52
    #39133224
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
База 974918 записей и растет.
Параметр
`ReceivedAt` datetime DEFAULT NULL,INDEX
Уникальных записей 487459 из 974918

Формирую результат типа YYYY-MM

Запрос (2 всего, Запрос занял 2.5412 сек.)
Код: sql
1.
2.
3.
SELECT SQL_NO_CACHE DISTINCT CONCAT(YEAR(ReceivedAt), '-',MONTH(ReceivedAt)) AS date 
FROM SystemEvents AS se 
ORDER BY ReceivedAt DESC


Запрос (2 всего, Запрос занял 2.4701 сек.)
Код: sql
1.
2.
3.
SELECT SQL_NO_CACHE DISTINCT DATE_FORMAT(ReceivedAt, '%Y-%m') AS date 
FROM SystemEvents AS se 
ORDER BY ReceivedAt DESC
...
Рейтинг: 0 / 0
21.12.2015, 15:48:23
    #39133294
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
И что?
...
Рейтинг: 0 / 0
21.12.2015, 16:00:39
    #39133321
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
AkinaИ что?
Очень долго
Ищу других путей
...
Рейтинг: 0 / 0
21.12.2015, 16:04:09
    #39133333
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
А что ты хочешь? у тебя идёт фуллскан (и ещё хорошо, что по индексу, а не по таблице). Для миллиона записей 2 секунды - вполне нормальный результат.
...
Рейтинг: 0 / 0
21.12.2015, 16:09:38
    #39133351
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
Николай Жуков,

Вы DISTINCT-ом перелопачиваете всю таблицу в миллион записей. Это так и надо?
А потом еще и сортируете полмиллиона выбранных записей по величине, которой даже нет сортируемом наборе.
...
Рейтинг: 0 / 0
21.12.2015, 20:04:43
    #39133746
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
Сейчас ТС скажет, что эти полмиллиона записей надо показать пользователю...
...
Рейтинг: 0 / 0
22.12.2015, 08:50:05
    #39134108
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
tanglirСейчас ТС скажет, что эти полмиллиона записей надо показать пользователю...
Да нет все нормально.
Нет то Нет
...
Рейтинг: 0 / 0
22.12.2015, 09:34:06
    #39134138
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
tanglirСейчас ТС скажет, что эти полмиллиона записей надо показать пользователю...

И что за сокращение ТС
...
Рейтинг: 0 / 0
22.12.2015, 10:02:35
    #39134160
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
TopicStarter, автор темы.
...
Рейтинг: 0 / 0
22.12.2015, 13:25:24
    #39134459
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
Николай ЖуковAkinaИ что?
Очень долго
Ищу других путей

2 секунды тебе на такой запрос долго?
сколько ж тебе нужно тогда для счастья?
...
Рейтинг: 0 / 0
07.01.2016, 04:22:09
    #39142928
Artemeey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
Николай Жуков,

2 сек. действительно очень долго.
В таких случаях нужно делать индекс ГОД+МЕСЯЦ и делать группировку по этим полям: ORDER BY `year`, `month`

Для этого придется сделать 1 дополнительную колонку (`date_month`, тип: varchar(7)) и при вставке строки добавить `date_month` = CONCAT(YEAR(значение_ReceivedAt), MONTH(значение_ReceivedAt))

`date_month` - читается как "дата с месяцем", пример: 2015-11

Полный запрос в итоге:
SELECT SQL_NO_CACHE ONCAT(YEAR(ReceivedAt), '-',MONTH(ReceivedAt)) AS date
FROM SystemEvents AS se
GROUP BY `date_month`
ORDER BY ReceivedAt DESC

Такой запрос должен выполняться моментально.
...
Рейтинг: 0 / 0
07.01.2016, 04:23:43
    #39142929
Artemeey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
ArtemeeyВ таких случаях нужно делать индекс ГОД+МЕСЯЦ и делать группировку по этим полям: ORDER BY `year`, `month`

Опечатка, надо: GROUP BY `date_month`
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго) / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]