@dba_ru

Страница 635 из 718
Frank
03.09.2018
17:38:59
Проблемка в GROUP BY

Al
03.09.2018
17:38:59
А то страшно представить что будет происходить когда база разрастется

Frank
03.09.2018
17:39:32
как только добавляем аггрегацию - попадаем на using temporary & join buffer.

lost
03.09.2018
17:39:57
чёт запросики у тебя так себе

Google
Al
03.09.2018
17:40:12
как только добавляем аггрегацию - попадаем на using temporary & join buffer.
Прикинь в базе будет несколбко десятков миллионов строк на твою выборку

Frank
03.09.2018
17:40:20
И-мен-но :)

Собственно почему и спрашиваю

Как бы желаемое что один запрос что другой выдаёт

Al
03.09.2018
17:41:24
Frank
03.09.2018
17:42:29
Ну вот не даёт моё чувство прекрасного) Я же понимаю что это неэффективно. С подзапросиками я понемногу сужаю выборки и в итоге последние группировки делаю уже по результатам селекта. Там план выглядит получше, но опять таки группировка меня не радует

lost
03.09.2018
17:43:13
я бы на твоем месте не был так уверен что твой сабквери работает

ты видешь где-нибудь в эксплейне derived table ?

если нет derived table - значит запрос был оптимизирован с помощью derived_merge, а это в большинстве случаев говно-оптимизация

Frank
03.09.2018
17:45:00
Таки не вижу

lost
03.09.2018
17:45:10
ну вот...

Al
03.09.2018
17:45:41
Ну вот не даёт моё чувство прекрасного) Я же понимаю что это неэффективно. С подзапросиками я понемногу сужаю выборки и в итоге последние группировки делаю уже по результатам селекта. Там план выглядит получше, но опять таки группировка меня не радует
Потому что подобная хрень уронит что угодно. Нужно либо зарпние вводить категории в отдельной колонке. Либо делать какую то доп таблицу где будет подобная статистика хранится и обновлятся на уровне приложения.

Frank
03.09.2018
17:45:43


Google
Захар
03.09.2018
17:47:45
а лучше машку за ляшку

Frank
03.09.2018
17:48:07
Ну нет) Я как бы не новичок, просто в данном случае есть готовая структура данных и стоит задача погонять по ней выборки - наивная реализация в эксплейне выглядит очень сурово, поэтому я ищу методы оптимизации. Правка структуры - возможна, но хочется сначала выжать максимум без неё.

Хы))

Вот сейчас это писал и дошло. Немного поправил индекс для более полного использования. И таки получил желаемое

Причем в наивной же реализации



lost
03.09.2018
17:51:45
все равно шляпа

type = index читай как фуллскан

Frank
03.09.2018
17:52:34
Фуллскан индекса, который вероятно валяется в индекс-буфере - это лучше чем фуллскан таблицы

lost
03.09.2018
17:52:45
это на чуть-чуть лучше чем all но все равно шляпа

Frank
03.09.2018
17:53:33
Тоже правда, помнится некоторые индексы весят сравнимо с данными

lost
03.09.2018
17:54:24
Тоже правда, помнится некоторые индексы весят сравнимо с данными
кстати в подзапросе у тебя не будет индекс целиком использоваться потому что ты с ним неправильно работаешь

Frank
03.09.2018
17:55:14
Ну вычислимые поля, да - но я таки не зря birthdate поставил последним

lost
03.09.2018
17:55:45
так именно он у тебя и не будет использоваться :)

Tony
03.09.2018
17:58:33
Я делаю выборку и сортирую, например, по уровню (level). Можно ли узнать, на каком месте стоит юзер с айди, например, 5? Постгря

Al
03.09.2018
17:59:39
Маразм крепчает

lost
03.09.2018
18:00:21
@Frank_Einstein вообще, если уж по делу говорить - запрос у тебя должен быть быть вот такой: SELECT a.id as a_id, SUM(l.amount), COUNT(*) FROM account a JOIN loan l ON l.account_id = a.id WHERE a.sex = 2 AND a.birthday BETWEEN UNIX_TIMESTAMP(NOW - INTERVAL 30 YEAR) AND UNIX_TIMESTAMP(NOW - INTERVAL 20 YEAR) GROUP BY 1 ORDER BY NULL и уже потом ты навешиваешь все необходимые тебе поля по фамилиям и прочим данным, чем меньше объем данных ты группируешь и сортируешь и вообще держишь во внутренней временной таблице во время запроса - тем лучше

Google
Frank
03.09.2018
18:01:54
Я кстати немного поизвращался с force index, но такое себе)

lost
03.09.2018
18:01:54
В file sort самом по себе нет ничего плохого.
ага, если только он не внутренний на диске

Frank
03.09.2018
18:02:23
lost
03.09.2018
18:05:53
ну потому что не нужно использовать тулзу для эксплейна, в которой ты все ручки покрутить не можешь...

Frank
03.09.2018
18:06:10
Увы, обычный db-fiddle

lost
03.09.2018
18:06:27
вся вот эта вот дичь с вебмордой делается в докере за 5 минут с перекуром

Admin
ERROR: S client not available

Frank
03.09.2018
18:07:53
А можно ещё раз запрос, на пасту бина...?
https://www.db-fiddle.com/f/hMeiFEvuEz5D65CoG3bbkK/0

И все варианты решения, тот который раскомментирован - lost soul, два остальных мои.

Frank
03.09.2018
18:10:17
Собсна у первых двух план в целом одинаковый - у третьего почудовищнее

ну потому что не нужно использовать тулзу для эксплейна, в которой ты все ручки покрутить не можешь...
Кстати на тему тулзы) А какие варианты? У меня в основном datagrip встроенный в IDE джетбрейнсовскую, у него вроде тот же самый набор

lost
03.09.2018
18:12:13
я имел ввиду что сама эта вебморда предоставляет не полный функционал

версия мускуля 5.7, explain format = json не сделать, почему? а хрен его знает почему...



норм тулза, пацаны

взял и сервер (не дай бог) отправил погулять

Frank
03.09.2018
18:16:17
Дык докер-песочница тоже поди

Google
lost
03.09.2018
18:16:27
возможно

Frank
03.09.2018
18:17:01
Если нет - зря :)

Ну кстати))

Format=json я таки сделал там

v 5.6 правда только

lost
03.09.2018
18:19:37
все-таки да, контейнер

Frank
03.09.2018
18:19:50
везёт им

lost
03.09.2018
18:20:46
ты сегодня немногословен

Al
03.09.2018
19:22:30
может кто помочь?
мы же уже обсуждали раз. помощь это когда ты делаешь и тебе помогают исправить ошибки а ты хочешь что бы за тебя сделали, и это уже РАБОТА, за нее в кассу :)

Al
03.09.2018
19:23:40

Страница 635 из 718