powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / MySQL [закрыт для гостей] / Господа базоёбы, скок сюды, Поиск: Искать сообщения, созданные автором: PaNik  
25 сообщений из 36, страница 1 из 2
MySQL / Господа базоёбы, скок сюды
    #58492
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Хз как там в MySQL, но псевдонимы таблицам я бы назначил
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58503
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
паразит  07.06.2022, 19:45
[игнорируется]
basename [игнорируется] 

почему лефт джоины используешь, ведь тебе именно аттачменте нужны?
Тож так сначала подумал, что надо from v1_attachment сделать.
Но потом подумал, что на v1_post.user_id наверняка индекс есть.
...
Изменено: 07.06.2022, 19:48 - PaNik
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58508
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
паразит  07.06.2022, 19:50
[игнорируется]
PaNik  07.06.2022, 19:47
[игнорируется]
паразит  07.06.2022, 19:45
[игнорируется]
basename [игнорируется] 

почему лефт джоины используешь, ведь тебе именно аттачменте нужны?
Тож так сначала подумал, что надо from v1_attachment сделать.
Но потом подумал, что на v1_post.user_id наверняка индекс есть.
Так-то лефтами можно выстраивать порядок соединения выборки, есть такой лайфхак, но нормальный оптимизатор сам должен разбираться с такими вещами если можно индекс подцепить. Сейчас 2022 на лворе
Крайний раз MySQL в 2006-м году трогал, чего там с оптимизатором сейчас - вообще без понятия [:prankster]
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58511
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
basename, планы давай
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58512
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Вообще в ms sql хорошо (в теории) было бы примерно так:

1) при наличии индекса по v1_post.user_id выбираем во времянку id и темы всех сообщения юзверя (их пока немного, это ж не Инос или Гарыныч с дедофорума с Овер 100к постов).
2) эту времянку inner join'ним на v1_attachment и v1_topic, выводим нужные поля.
...
Изменено: 07.06.2022, 20:06 - PaNik
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58527
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
basename  07.06.2022, 20:19
[игнорируется]
Табличка пост - самая объемная.
Не суть, если там индекс по user_id include (post_id, topic_id), то все будет быстро (примерно к ms sql server)
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58531
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
паразит  07.06.2022, 20:25
[игнорируется]
basename  07.06.2022, 20:14
[игнорируется]
паразит  07.06.2022, 19:55
[игнорируется]
basename  07.06.2022, 19:49
[игнорируется]
паразит  07.06.2022, 19:45
[игнорируется]
...
к таблице post, самой объёмной, присоединяю остальные.
Понятно. Фик знает как там мусикл действует, но по сути ты сначала получаешь полную выборку и в том числе с сообщениями без аттачментов, а сверху накладываешь условие нот налл. Попробуй в условии склейки таблиц добавить этот нот налл. В фб такое прокатывали. Может побыстрее ьудет
Пока о скорости речи нет, но на будущее может понадобится. Сейчас хочу просто корректный список на удаление формировать. У деды через интерфейс ничего не удаляется физически, только скрывается. Пока БД маленькая, проще подготовиться.
Что исходное в задаче, от чего ты оттадкиваешься, айди пользователя, его имя или ещё что-то?
Исходное (как я понял) - аттачи юзера
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58565
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
паразит  07.06.2022, 20:38
[игнорируется]
basename  07.06.2022, 20:37
[игнорируется]
PaNik  07.06.2022, 20:35
[игнорируется]
basename  07.06.2022, 20:31
[игнорируется]
паразит  07.06.2022, 20:22
[игнорируется]
...
Хм, в муsql inner join -это просто join, а right - то же, что left, но наоборот. Он тоже outer. Если я правильно понял.
basename  07.06.2022, 20:32
[игнорируется]
PaNik  07.06.2022, 20:28
[игнорируется]
...
Ну а их выборка то на основе user_id
Ага, через таблицу с постами
Я вначале брал из таблицы user) херь вышла
Все зависит от организации таблиц и индексов и работы оптимизатора. Может ему помочь надо.
Вот только без подсказок
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58726
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Горбатый ёж  07.06.2022, 21:37
[игнорируется]
basename [игнорируется] 

Чего там прикладывать?
Лефт везде убери, раз тебе атачменты нужны.
С лефт джойном.
Ты берёшь, получаешь все посты пользователя и пришпандориваешь аттачи к тем постам, где они есть, вот тебе и дубли.
Туда же ещё и темы пришпандориваешь так же.

Смысла лефт джойна тем и постов нет, потому что темя с постами связаны по любому. А так как тебе надо только посты с аттачами, то и смысла лефт джойна с аттачами тоже нет.
ЗЫ но я не так лефты пишу, раз он левый то присобачиваемую таблицу пишу слева от знака =. Типа эстет.
Теоретег детектед. Таблица постов самая здоровая (овердохуя записей относительно остальных таблиц), в случае иннер джоина условия соединения равносильны условиям в предложении where и оптимизатор может снача на сотни тысяч записей в таблице постов начать джоинить другие таблицы, что может потребовать выделения значительного объема ОЗУ и сброса результата в tempdb, что не есть продуктивно.
У Бази в первоначальном запросе на таблицу постов накладывается ограничение по юзер_ид, что в случае индекса по юзер_ид инклуде (пост_ид, топик_ид) сведётся к поиску по индексу для выделения постов автора и джоину по относительно небольшому числу постов конкретного юзера. Правда у него тогда в where мешает условие на is not null для вложения.

З.ы. нет планов - нет аналитики.
З.з.ы. вышеописанное применительно к ms sql, чего там с оптимизатором mysql - я хз
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58728
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Горбатый ёж  07.06.2022, 21:44
[игнорируется]
Потому что лефт покажет записи из постов даже те, у которых нет аттачей.
У Бази условие в where на is not null для поля таблицы из left join
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58729
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Горбатый ёж  07.06.2022, 21:45
[игнорируется]
basename [игнорируется] 

И я не уверен, что твоё условие attach.name is not null имеет смысл, как я понимаю у деды любой аттач имеет имя.
Условие в предложении where, а не в on соединения [:ireful]
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58731
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
basename  07.06.2022, 21:46
[игнорируется]
Горбатый ёж  07.06.2022, 21:44
[игнорируется]
basename  07.06.2022, 21:41
[игнорируется]
Почему нет?
Потому что лефт покажет записи из постов даже те, у которых нет аттачей.
Зачем тебе они, если ты аттачи ищешь?
И зачем тебе показывать посты, которые не привязаны к топикам (с лефтом именно так ты и делаешь), если это как минимум странно? Как там планы в таком случае это майскуль построит ХЗ.
А… понял. Тупой сука. Он же все равно сканит таблицу полностью, потом селект делает. Так?

Он все присоединил вначале, потом просто отобразил, что попросили.
Йожег попутал, у тебя is not null в where, а не в on
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58757
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
basename  07.06.2022, 22:12
[игнорируется]
PaNik  07.06.2022, 22:05
[игнорируется]
basename  07.06.2022, 21:46
[игнорируется]
Горбатый ёж  07.06.2022, 21:44
[игнорируется]
basename  07.06.2022, 21:41
[игнорируется]
...
Потому что лефт покажет записи из постов даже те, у которых нет аттачей.
Зачем тебе они, если ты аттачи ищешь?
И зачем тебе показывать посты, которые не привязаны к топикам (с лефтом именно так ты и делаешь), если это как минимум странно? Как там планы в таком случае это майскуль построит ХЗ.
А… понял. Тупой сука. Он же все равно сканит таблицу полностью, потом селект делает. Так?

Он все присоединил вначале, потом просто отобразил, что попросили.
Йожег попутал, у тебя is not null в where, а не в on
Дык он с нулями выводил, я это и вставил. Правильно или нет - я хз. У вас спрашиваю.
С точки зрения запроса (того, что тебе нужно получить) - правильно.
Но открывает простор для действий оптимизатора, может пойти по неоптимальному пути (мой длинный пост выше) и отработать заметно медленнее с привлечением заметно большего числа ресурсов.

З.Ы. Нужны планы.
З.З.Ы. планы имеют тенденцию становиться неактуальными с увеличением числа записей.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58781
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
PaNik  07.06.2022, 22:17
[игнорируется]
basename  07.06.2022, 22:12
[игнорируется]
PaNik  07.06.2022, 22:05
[игнорируется]
basename  07.06.2022, 21:46
[игнорируется]
Горбатый ёж  07.06.2022, 21:44
[игнорируется]
...
А… понял. Тупой сука. Он же все равно сканит таблицу полностью, потом селект делает. Так?

Он все присоединил вначале, потом просто отобразил, что попросили.
Йожег попутал, у тебя is not null в where, а не в on
Дык он с нулями выводил, я это и вставил. Правильно или нет - я хз. У вас спрашиваю.
С точки зрения запроса (того, что тебе нужно получить) - правильно.
Но открывает простор для действий оптимизатора, может пойти по неоптимальному пути (мой длинный пост выше) и отработать заметно медленнее с привлечением заметно большего числа ресурсов.

З.Ы. Нужны планы.
З.З.Ы. планы имеют тенденцию становиться неактуальными с увеличением числа записей.
58512
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58785
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
basename  07.06.2022, 22:29
[игнорируется]
cat2  07.06.2022, 22:15
[игнорируется]
basename  07.06.2022, 22:12
[игнорируется]
PaNik  07.06.2022, 22:05
[игнорируется]
basename  07.06.2022, 21:46
[игнорируется]
...
Йожег попутал, у тебя is not null в where, а не в on
Дык он с нулями выводил, я это и вставил. Правильно или нет - я хз. У вас спрашиваю.
Завязывай спрашивать, делай что советуют
Ок. Подробнее обрисую, подробнее рассмотрим. Я просто запрос сделал согласно доке mysql.
С точки зрения поставленной задачи (выбрать все аттачменты юзера) запрос в стартовом посте корректен
...
Изменено: 07.06.2022, 22:31 - PaNik
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58899
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Артефакт  08.06.2022, 05:32
[игнорируется]
а я не спал всю ночь
но на скуль не тянет хотя и базоеб
Та же фигня
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #59257
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Горбатый ёж  08.06.2022, 08:04
[игнорируется]
Это конечно такой хитрый лайфхак, использование поля not null для имитации джойна при использовании лефт джойна, но в общем случае это не работает.
Чего???
Почему не работает???
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #59261
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Горбатый ёж  08.06.2022, 10:57
[игнорируется]
включить сию заебатую возможность используя хинт.
Ога, блеать, навтыкают хинтов, потом таблица разрастается и наступает пиздец
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #59339
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Горбатый ёж  08.06.2022, 14:24
[игнорируется]
PaNik  08.06.2022, 13:23
[игнорируется]
Горбатый ёж  08.06.2022, 08:04
[игнорируется]
Это конечно такой хитрый лайфхак, использование поля not null для имитации джойна при использовании лефт джойна, но в общем случае это не работает.
Чего???
Почему не работает???
Потому что в общем случае поле name в таблице аттачментов может быть null и ты потеряешь аттачмент.
Там имя файла с аттачментом. Если там null - аттачмента нет.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #59356
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Горбатый ёж  08.06.2022, 14:29
[игнорируется]
PaNik  08.06.2022, 14:27
[игнорируется]
Там имя файла с аттачментом. Если там null - аттачмента нет.
Откуда ты знаешь все общие случаи?
А что делать, если аттачмент в систему приаттачивается посредством православного копипаста, который о опять таки в общем случае может не иметь никакого имени файла (в отличии от богомерзкого драгэндропа)?
basename, что хранится в поле v1_attachment.name?
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #59371
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Горбатый ёж  08.06.2022, 14:40
[игнорируется]
PaNik  08.06.2022, 14:39
[игнорируется]
Горбатый ёж  08.06.2022, 14:29
[игнорируется]
PaNik  08.06.2022, 14:27
[игнорируется]
Там имя файла с аттачментом. Если там null - аттачмента нет.
Откуда ты знаешь все общие случаи?
А что делать, если аттачмент в систему приаттачивается посредством православного копипаста, который о опять таки в общем случае может не иметь никакого имени файла (в отличии от богомерзкого драгэндропа)?
basename, что хранится в поле v1_attachment.name?
Какая разница, я изначально писал, что способ конечно рабочий, но не в общем случае.
И вообще использовать такое вместо простого джойна - это странно.
Вполне рабочий вариант.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #59420
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Горбатый ёж  08.06.2022, 15:21
[игнорируется]
PaNik  08.06.2022, 14:49
[игнорируется]
Вполне рабочий вариант.
Не в общем случае.
"Общие случаи" часто пагубно сказываться на производительности в данном конкретном случае
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #60224
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
basename  09.06.2022, 15:16
[игнорируется]
basename  09.06.2022, 15:13
[игнорируется]
PaNik  07.06.2022, 19:59
[игнорируется]
basename, планы давай
На первой картинке для моего сабжевого запроса

на второй с простым join
pasted_image.png
pasted_image.png
Хм, а почему с join Query Cost больше, чем с Left Join?
Планы разные.
По сути вопроса: вероятно, количество вложений подопытного несколько менее числа топиков, в которые он насрал.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #60230
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
basename  09.06.2022, 15:30
[игнорируется]
basename  09.06.2022, 15:16
[игнорируется]
basename  09.06.2022, 15:13
[игнорируется]
PaNik  07.06.2022, 19:59
[игнорируется]
basename, планы давай
На первой картинке для моего сабжевого запроса

на второй с простым join
pasted_image.png
pasted_image.png
Хм, а почему с join Query Cost больше, чем с Left Join?
Господа, проясните плиз за Query cost. Ведь значение больше, это хуже?
По планам порядок соединения таблиц разный.
Это реальный план выполнения или предполагаемый?
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #60233
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
basename  09.06.2022, 15:37
[игнорируется]
Tammy Jo Saint Cloud [игнорируется] 

Если я правильно понял, в сабжевом случае, согласно анализатору запроса, left join быстрее работает?
Выводи время исполнения для каждого запроса
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / MySQL [закрыт для гостей] / Господа базоёбы, скок сюды, Поиск: Искать сообщения, созданные автором: PaNik  
Читали тему (1): Анонимы (1)
Игнорируют тему (1): erbol
Читали форум (3): Анонимы (2), Google Bot 2 мин.
Пользователи онлайн (87): Анонимы (80), Yandex Bot, Bing Bot, Гарыныч 1 мин., Google Bot 1 мин., Артефакт 1 мин., NSFuimus 2 мин., Разум вселенной 8 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


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