powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка после distinct SUBSTRING_INDEX(...)
6 сообщений из 31, страница 2 из 2
Сортировка после distinct SUBSTRING_INDEX(...)
    #39134516
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж, это круче чем мой баг с рандомом
А такой запрос
Код: sql
1.
2.
3.
4.
5.
6.
select * from (
 SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(se.Message,' ',2),' ',-1) AS ip
 FROM SystemEvents AS se
 WHERE se.SysLogTag='web-proxy,account' AND 
	INET_ATON(SUBSTRING_INDEX(SUBSTRING_INDEX(se.Message,' ',2),' ',-1))>0
) t0

тоже выдаст 9 и 0.05 с инсертом и без соответственно?
...
Рейтинг: 0 / 0
Сортировка после distinct SUBSTRING_INDEX(...)
    #39142934
Artemeey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно добавить индекс на поле `Message` и сортировать по нему.
Если оно начинается с IP - то сортировка будет работать как надо и очень быстро. Длину индекса кстати можно указать - varchar(17), так как для сортировки нам важный первые 17 символов (_XXX.XXX.XXX.XXX)

Рекомендую никогда не делать сортировку по не индексированному полю.

В вашем случае конечно интерпретатор работает интересно. Может быть он считает сортировку в данном случае более простой операцией, чем условия WHERE и выполняет ее раньше. Для всех строк - это долго. При использовании LIMIT это было бы оправдано.
Но это лишь мое предположение.
...
Рейтинг: 0 / 0
Сортировка после distinct SUBSTRING_INDEX(...)
    #39142937
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Жуков,

зачем вам скорость? кто пользователь?
у вас такие запросы идут по 5 штук в секунду?

Если нужно часто, имеет смысл копать в сторону
логический улучшений:

1. Вместо постояной дро..и распоковки и пасинга
можно распарсить message на вставке. добарить деривативные (расчетные)
поля IP и ValidIpFlag=(0|1) и соответсвыюший индекс(ы)

Код: sql
1.
2.
3.
4.
5.
6.
7.
select * from
(
SELECT distinct IP DistIP
FROM SystemEvents AS se
WHERE se.SysLogTag='web-proxy,account' AND ValidIpFlag=1
) Z
ORDER BY DistIP




2. создать агрегированую таблицу уникальных ИП на каждый день или там каждый час.
Дополнять таблицу по истечении очередного промежутка.
Если надо иметь результат до последней секунды, то
выбирать значения из пре-агрегатной таблицы до поледнего часа
а потом просчитывать динамически только последние минуты после часа.
Это вариант грамчик сложноватенький по организации
зато получите результат порядка нескольких милисекунд
...
Рейтинг: 0 / 0
Сортировка после distinct SUBSTRING_INDEX(...)
    #39143009
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcзато получите результат порядка нескольких милисекундУ него и так было 50-60 мс. Хотя я не понимаю, почему так быстро.
А при вставке в таблицу или еще каком-либо использовании результата запроса размером в 80 несчастных записей вдруг время подскакивает до 9 секунд.
...
Рейтинг: 0 / 0
Сортировка после distinct SUBSTRING_INDEX(...)
    #39143206
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftjavajdbcзато получите результат порядка нескольких милисекундУ него и так было 50-60 мс. Хотя я не понимаю, почему так быстро.
А при вставке в таблицу или еще каком-либо использовании результата запроса размером в 80 несчастных записей вдруг время подскакивает до 9 секунд.


да, тут какая-то техническая проблема.
Но кроме любопытсва почему имено такой запрос
рабодает через пень-колоду -- мне не нравится сама
идея часто перелопачивать (в основном статические) милион записей чтобы
выташить 80 значений. Интереснее решать
бизнес / логические задачи, заранее приготовить данные
для быстрого потребления , пре-агрегировать, итд...

Однозначно плохо иметь такую недетерминированую ситуацию, но как бы
база сама намекает что запрос "корявый"...
...
Рейтинг: 0 / 0
Сортировка после distinct SUBSTRING_INDEX(...)
    #39187739
javajdbcзаранее приготовить данные
для быстрого потребления , пре-агрегировать, итд...

Однозначно плохо иметь такую недетерминированую ситуацию, но как бы
база сама намекает что запрос "корявый"...

Я и забыл про этот пост уже

Подготовить данные нет возможности
Речь идет о стандартном syslogd mysql На Ubuntu
Все что могу это добавлять индексы но колонка messages - text
А лог отправляют аппаратные маршрутизаторы
Мне если честно и сортировка то не нужно
Но просматривает начальство а им подавай цифры по порядку чтоб искать проще

Если есть возможность связать две таблицы вместе (средствами mysql)
И во вторую таблицу автоматически распарсивать messages из первой по колонкам с индексами по мере добавления.
то это наверно единственный вариант, после переписывания syslog под себя.
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка после distinct SUBSTRING_INDEX(...)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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