Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка после distinct SUBSTRING_INDEX(...) / 25 сообщений из 31, страница 1 из 2
10.12.2015, 00:23
    #39124531
Сортировка после distinct SUBSTRING_INDEX(...)
Имеется стандартная база Syslog
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE TABLE IF NOT EXISTS `SystemEvents` (
  `ID` int(10) unsigned NOT NULL,
  `CustomerID` bigint(20) DEFAULT NULL,
  `ReceivedAt` datetime DEFAULT NULL,
  `DeviceReportedTime` datetime DEFAULT NULL,
  `Facility` smallint(6) DEFAULT NULL,
  `Priority` smallint(6) DEFAULT NULL,
  `FromHost` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Message` text COLLATE utf8_unicode_ci,
  `NTSeverity` int(11) DEFAULT NULL,
  `Importance` int(11) DEFAULT NULL,
  `EventSource` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
  `EventUser` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
  `EventCategory` int(11) DEFAULT NULL,
  `EventID` int(11) DEFAULT NULL,
  `EventBinaryData` text COLLATE utf8_unicode_ci,
  `MaxAvailable` int(11) DEFAULT NULL,
  `CurrUsage` int(11) DEFAULT NULL,
  `MinUsage` int(11) DEFAULT NULL,
  `MaxUsage` int(11) DEFAULT NULL,
  `InfoUnitID` int(11) DEFAULT NULL,
  `SysLogTag` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
  `EventLogType` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
  `GenericFileName` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
  `SystemID` int(11) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=419356 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



В SysLogTag много всего но в основном 'web-proxy,account'
В Message приблизительно ' 192.168.127.23 GET http://i47.fastpic.ru/big/2013/0504/4b/c7d17bcb8543bd367cdd17416ce8424b.gif action=allow cache=MISS'

Выборка из 400000+ строк (61 всего, Запрос занял 0.0538 сек.) Терпимо
Код: sql
1.
2.
3.
4.
5.
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
ORDER BY ip


Но когда пытаюсь сортировать все плохо (61 всего, Запрос занял 3.4549 сек.)
Код: sql
1.
ORDER BY ip ASC
...
Рейтинг: 0 / 0
10.12.2015, 00:55
    #39124540
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
Николай Жуков,

Показывайте точные запросы и их планы.
...
Рейтинг: 0 / 0
10.12.2015, 01:13
    #39124543
Сортировка после distinct SUBSTRING_INDEX(...)
miksoft,
это и есть точный запрос
Без сортировки
Код: sql
1.
2.
3.
4.
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


С сортировкой
Код: sql
1.
2.
3.
4.
5.
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
ORDER BY ip ASC


первый 0.0538 сек. второй 3.4549 сек.
...
Рейтинг: 0 / 0
10.12.2015, 01:18
    #39124545
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
И планы запросов, пожалуйста.

Попутно попробуйте такие варианты:
Код: sql
1.
2.
3.
4.
5.
SELECT 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
GROUP BY ip ASC

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT ip 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
) t
ORDER BY ip ASC
...
Рейтинг: 0 / 0
10.12.2015, 01:20
    #39124546
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
Николай Жуковпервый 0.0538 секА это точно результат не из кэша? добавьте слово SQL_NO_CACHE сразу после слова SELECT, чтобы кэш запросов не влиял.
...
Рейтинг: 0 / 0
10.12.2015, 01:22
    #39124547
Сортировка после distinct SUBSTRING_INDEX(...)
EXTPLAN



без сортировки

select_type:SIMPLE
Table:se
Type:ALL
possible_keys:NULL
key:NULL
key_len:NULL
ref:NULL
rows:400635
Extra:Using where; Using temporary

с сортировкой
Extra:Using where; Using temporary; Using filesort
...
Рейтинг: 0 / 0
10.12.2015, 01:24
    #39124548
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
Николай Жуков
Код: sql
1.
se.SysLogTag='web-proxy,account'

Для какой доли записей выполняется это условие?
...
Рейтинг: 0 / 0
10.12.2015, 01:25
    #39124549
Сортировка после distinct SUBSTRING_INDEX(...)
Код: sql
1.
2.
3.
4.
SELECT SQL_NO_CACHE 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


61 всего, Запрос занял 0.0560 сек.
...
Рейтинг: 0 / 0
10.12.2015, 01:31
    #39124552
Сортировка после distinct SUBSTRING_INDEX(...)
miksoftНиколай Жуков
Код: sql
1.
se.SysLogTag='web-proxy,account'

Для какой доли записей выполняется это условие?
Сейчас 70% планируется 90-98%

miksoftПопутно попробуйте такие варианты:
(61 всего, Запрос занял 3.3338 сек.) для GROUP
3.56 ORDER
...
Рейтинг: 0 / 0
10.12.2015, 01:36
    #39124554
Сортировка после distinct SUBSTRING_INDEX(...)
miksoftНиколай Жуков
Код: sql
1.
se.SysLogTag='web-proxy,account'

Для какой доли записей выполняется это условие?

Исправляюсь 400635 из 419356 как раз уже 96-98%
...
Рейтинг: 0 / 0
10.12.2015, 02:15
    #39124563
Сортировка после distinct SUBSTRING_INDEX(...)
Заметил что
Код: sql
1.
2.
3.
4.
5.
SELECT distinct @ip:=INET_ATON(SUBSTRING_INDEX(SUBSTRING_INDEX(se.Message,' ',2),' ',-1)) AS ip,INET_NTOA(@ip) AS ip2
FROM SystemEvents AS se
WHERE se.SysLogTag='web-proxy,account' AND 
	INET_ATON(SUBSTRING_INDEX(SUBSTRING_INDEX(se.Message,' ',2),' ',-1))>0
ORDER BY ip ASC


работает быстрее но не значительно 3.1-3.2 сек.
А без сортировки вообще летает (61 всего, Запрос занял 0.0484 сек.)
Также сортировка без повторной распаковки IP в два раза быстрее (61 всего, Запрос занял 1.7083 сек.)
Код: sql
1.
2.
3.
4.
5.
SELECT distinct @ip:=INET_ATON(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
ORDER BY ip ASC
...
Рейтинг: 0 / 0
11.12.2015, 12:41
    #39125745
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
Николай Жуковmiksoftпропущено...
Для какой доли записей выполняется это условие?

Исправляюсь 400635 из 419356 как раз уже 96-98%т.е. 400 тысяч записей, но из них условию INET_ATON(...)>0 удовлетворяют только 61?
...
Рейтинг: 0 / 0
11.12.2015, 13:05
    #39125788
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
tanglirт.е. 400 тысяч записей, но из них условию INET_ATON(...)>0 удовлетворяют только 61?Это же после distinct-а. Т.е. они сильно повторяются.
...
Рейтинг: 0 / 0
11.12.2015, 13:52
    #39125828
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
miksofttanglirт.е. 400 тысяч записей, но из них условию INET_ATON(...)>0 удовлетворяют только 61?Это же после distinct-а. Т.е. они сильно повторяются.Упустил этот момент. Если целых три секунды, то наверное да, повторяются. Ну тут кроме выделения этого INET_ATON(...) в отдельное индексированное поле вариантов, наверное, и нет.
Хотя... ТС так и не ответил, сколько работает этот запрос
miksoft
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT ip 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
) t
ORDER BY ip ASC
...
Рейтинг: 0 / 0
11.12.2015, 13:56
    #39125836
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
tanglirХотя... ТС так и не ответил, сколько работает этот запросНасколько я понял, ответил тут - 18538268 в последней строке поста.

Меня вот смущает ситуация, когда 61 запись "добывается" довольно быстро (хотя перелопатить нужно много), а их же отсортировать - долго (хотя объем копеечный).
Не первый раз вижу такой "заскок" у MySQL, но как лечить - не знаю. До сих пор если и удавалось, только только вариациями запроса. Или вообще записать в промежуточную таблицу и читать с сортировкой из нее.
...
Рейтинг: 0 / 0
21.12.2015, 14:57
    #39133185
Сортировка после distinct SUBSTRING_INDEX(...)
Извиняюсь за пробел во времени, в командировке был.
Попытаюсь ответить на все что пропустил.

База уже 968k записей.
Строка с которой производятся манипуляции ( 192.168.127.23 GET http://i47.fastpic.ru/big/2013/0504/4b/c7d17bcb8543bd367cdd17416ce8424b.gif action=allow cache=MISS)

Запрос без сортировки. Всего отвечающий требованию строк после DISTINCT (80 всего, Запрос занял 0.0495 сек.)
Код: sql
1.
2.
3.
4.
5.
SELECT DISTINCT @tmp:=INET_ATON(SUBSTRING_INDEX(SUBSTRING_INDEX(se.Message,' ',2),' ',-1)) AS tmp,
	INET_NTOA(@tmp) AS ip
FROM SystemEvents AS se 
WHERE se.SysLogTag='web-proxy,account' AND 
	INET_ATON(SUBSTRING_INDEX(SUBSTRING_INDEX(se.Message,' ',2),' ',-1))>0



Я так понимаю что ORDER с начало сортирует 970k записей а потом делает DISTINCT
Иначе объяснить что аналогичный запрос с сортировкой (80 всего, Запрос занял 6.8354 сек.)
Код: sql
1.
2.
3.
4.
5.
6.
SELECT DISTINCT @tmp:=INET_ATON(SUBSTRING_INDEX(SUBSTRING_INDEX(se.Message,' ',2),' ',-1)) AS tmp,
	INET_NTOA(@tmp) AS ip
FROM SystemEvents AS se 
WHERE se.SysLogTag='web-proxy,account' AND 
	INET_ATON(SUBSTRING_INDEX(SUBSTRING_INDEX(se.Message,' ',2),' ',-1))>0
ORDER BY @tmp DESC



(80 всего, Запрос занял 8.4260 сек.)
miksoft
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT ip 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
) t
ORDER BY ip ASC



miksoftНасколько я понял, ответил тут - 18538268 в последней строке поста.
Прирост в скорости между DISTINCT+ORDER и GROUP я бы списал на временную загрузку железа

И если можно то по подробнее вот об этом
miksoftИли вообще записать в промежуточную таблицу и читать с сортировкой из нее.
...
Рейтинг: 0 / 0
21.12.2015, 15:50
    #39133302
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
Николай ЖуковИ если можно то по подробнее вот об этом
miksoftИли вообще записать в промежуточную таблицу и читать с сортировкой из нее.Да прям буквально и сделать - создать табличку, заполнить ее запросом без сортировки из начала топика (который выполняется 0.0538 сек.), а потом сделать выборку из этой таблички с сортировкой.
...
Рейтинг: 0 / 0
21.12.2015, 17:25
    #39133546
Сортировка после distinct SUBSTRING_INDEX(...)
miksoftНиколай ЖуковИ если можно то по подробнее вот об этом
пропущено...
Да прям буквально и сделать - создать табличку, заполнить ее запросом без сортировки из начала топика (который выполняется 0.0538 сек.), а потом сделать выборку из этой таблички с сортировкой.


Создал таблицу
Код: sql
1.
2.
3.
CREATE TABLE IF NOT EXISTS `_sort` (
  `ip` varchar(40) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Добавлено 80 строк. (Запрос занял 8.9161 сек.)
Код: sql
1.
2.
3.
4.
5.
INSERT INTO _sort (`ip`)
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



Результат для запроса без INSERT(80 всего, Запрос занял 0.0511 сек.)
Код: sql
1.
2.
3.
4.
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
...
Рейтинг: 0 / 0
21.12.2015, 17:38
    #39133570
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
Николай ЖуковДобавлено 80 строк. (Запрос занял 8.9161 сек.)А если очистить табличку и повторить?
...
Рейтинг: 0 / 0
21.12.2015, 17:52
    #39133598
Сортировка после distinct SUBSTRING_INDEX(...)
miksoft,
Это сразу после очистки
...
Рейтинг: 0 / 0
21.12.2015, 17:59
    #39133608
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
Николай Жуковmiksoft,
Это сразу после очисткиСуть не в очистке, а в повторе запроса.
Не понимаю, куда там могут 8 секунд потратиться.
...
Рейтинг: 0 / 0
21.12.2015, 20:11
    #39133752
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
Николай Жуков,

а если табличку сделать engine=memory? ну так, в порядке бреда.
...
Рейтинг: 0 / 0
22.12.2015, 09:32
    #39134137
Сортировка после distinct SUBSTRING_INDEX(...)
tanglirНиколай Жуков,

а если табличку сделать engine=memory? ну так, в порядке бреда.

Готов проверить любой бред
Знать бы как
...
Рейтинг: 0 / 0
22.12.2015, 10:01
    #39134156
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка после distinct SUBSTRING_INDEX(...)
Николай ЖуковЗнать бы как
Код: sql
1.
2.
3.
CREATE TABLE IF NOT EXISTS `_sort` (
  `ip` varchar(40) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
...
Рейтинг: 0 / 0
22.12.2015, 11:32
    #39134262
Сортировка после distinct SUBSTRING_INDEX(...)
tanglirНиколай ЖуковЗнать бы как
Код: sql
1.
2.
3.
CREATE TABLE IF NOT EXISTS `_sort` (
  `ip` varchar(40) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



Честно в полном недоумении
(Запрос занял 0.0049 сек.)
Код: sql
1.
2.
3.
CREATE TABLE IF NOT EXISTS `_sort` (
  `ip` varchar(40) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci


Добавлено 80 строк. (Запрос занял 9.0948 сек.)
Код: sql
1.
2.
3.
4.
5.
INSERT INTO _sort (`ip`) 
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


Сам запрос (80 всего, Запрос занял 0.0561 сек.)
Код: sql
1.
2.
3.
4.
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
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка после distinct SUBSTRING_INDEX(...) / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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