powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
12 сообщений из 12, страница 1 из 1
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
    #39133224
База 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
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
    #39133294
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что?
...
Рейтинг: 0 / 0
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
    #39133321
AkinaИ что?
Очень долго
Ищу других путей
...
Рейтинг: 0 / 0
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
    #39133333
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что ты хочешь? у тебя идёт фуллскан (и ещё хорошо, что по индексу, а не по таблице). Для миллиона записей 2 секунды - вполне нормальный результат.
...
Рейтинг: 0 / 0
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
    #39133351
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Жуков,

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

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

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

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
Группировка DISTINCT в поле Datatime по Год+Месяц (Очень долго)
    #39142929
Artemeey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemeeyВ таких случаях нужно делать индекс ГОД+МЕСЯЦ и делать группировку по этим полям: ORDER BY `year`, `month`

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


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