powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Поиск: Искать ответы на сообщение: #58605  
21 сообщений из 21, страница 1 из 1
MySQL / Господа базоёбы, скок сюды
    #58605
Sparrow
Скрыть профиль Поместить в игнор-лист
Участник
basename  07.06.2022, 20:51
[игнорируется]
Sparrow  07.06.2022, 20:43
[игнорируется]
cat2  07.06.2022, 19:45
[игнорируется]
Черт. Это же MySQl

Не знаю, как там LEFT JOIN по умолчанию

LEFT OUTER JOIN

или

LEFT INNER JOIN
Outer как правило не нужен. Это лишнее слово.

LEFT INNER JOIN это нонсенс.

Бывают

Inner join
Left join
Right join
Full join
Вроде в mysql их 3
- join Inner
- left outer
- right outer
Это жуть. По стандартам sql не помню каким Толи 72 Толи позже

Бязя, тебе нужно понять что такое null в колонке, тогда поймёшь

Все соединение
Левое соединение
Правое соединение
Полное соединение

Получится разное количество строк с null в значениях.
Но все равно в
left join
Right join
Full join

Порождают дубли , с null , просто это разные соединения таблиц
,
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58614
basename
Скрыть профиль Поместить в игнор-лист
Участник
Sparrow  07.06.2022, 21:09
[игнорируется]
basename  07.06.2022, 20:51
[игнорируется]
Sparrow  07.06.2022, 20:43
[игнорируется]
cat2  07.06.2022, 19:45
[игнорируется]
Черт. Это же MySQl

Не знаю, как там LEFT JOIN по умолчанию

LEFT OUTER JOIN

или

LEFT INNER JOIN
Outer как правило не нужен. Это лишнее слово.

LEFT INNER JOIN это нонсенс.

Бывают

Inner join
Left join
Right join
Full join
Вроде в mysql их 3
- join Inner
- left outer
- right outer
Это жуть. По стандартам sql не помню каким Толи 72 Толи позже

Бязя, тебе нужно понять что такое null в колонке, тогда поймёшь

Все соединение
Левое соединение
Правое соединение
Полное соединение

Получится разное количество строк с null в значениях.
Но все равно в
left join
Right join
Full join

Порождают дубли , с null , просто это разные соединения таблиц
,
Да null я отфильтровал, is not null. Null - это нормально, если я правильно понял.

Вначале другие дубли были. Сабжевый запрос без дублей вроде работает.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58646
Sparrow
Скрыть профиль Поместить в игнор-лист
Участник
basename  07.06.2022, 21:14
[игнорируется]
Sparrow  07.06.2022, 21:09
[игнорируется]
basename  07.06.2022, 20:51
[игнорируется]
Sparrow  07.06.2022, 20:43
[игнорируется]
cat2  07.06.2022, 19:45
[игнорируется]
...
Outer как правило не нужен. Это лишнее слово.

LEFT INNER JOIN это нонсенс.

Бывают

Inner join
Left join
Right join
Full join
Вроде в mysql их 3
- join Inner
- left outer
- right outer
Это жуть. По стандартам sql не помню каким Толи 72 Толи позже

Бязя, тебе нужно понять что такое null в колонке, тогда поймёшь

Все соединение
Левое соединение
Правое соединение
Полное соединение

Получится разное количество строк с null в значениях.
Но все равно в
left join
Right join
Full join

Порождают дубли , с null , просто это разные соединения таблиц
,
Да null я отфильтровал, is not null. Null - это нормально, если я правильно понял.

Вначале другие дубли были. Сабжевый запрос без дублей вроде работает.
Тебе надо понять нужен тебе left join или не нужен? Это разные штуки, может тебе надо inner join.
Как сат2 советовал. Это зависит от структуры базы , и чего тебе надо.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58667
basename
Скрыть профиль Поместить в игнор-лист
Участник
Sparrow  07.06.2022, 21:22
[игнорируется]
basename  07.06.2022, 21:14
[игнорируется]
Sparrow  07.06.2022, 21:09
[игнорируется]
basename  07.06.2022, 20:51
[игнорируется]
Sparrow  07.06.2022, 20:43
[игнорируется]
...
Вроде в mysql их 3
- join Inner
- left outer
- right outer
Это жуть. По стандартам sql не помню каким Толи 72 Толи позже

Бязя, тебе нужно понять что такое null в колонке, тогда поймёшь

Все соединение
Левое соединение
Правое соединение
Полное соединение

Получится разное количество строк с null в значениях.
Но все равно в
left join
Right join
Full join

Порождают дубли , с null , просто это разные соединения таблиц
,
Да null я отфильтровал, is not null. Null - это нормально, если я правильно понял.

Вначале другие дубли были. Сабжевый запрос без дублей вроде работает.
Тебе надо понять нужен тебе left join или не нужен? Это разные штуки, может тебе надо inner join.
Как сат2 советовал. Это зависит от структуры базы , и чего тебе надо.
Ок. Я напишу подробно потом, приложу описания дедотаблиц.

Изначально, что я хотел:
- найти все вложения пользака
- вывести id пользака, имя, id топика, id поста, id форума, именование вложения.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58677
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
basename [игнорируется] 

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

Смысла лефт джойна тем и постов нет, потому что темя с постами связаны по любому. А так как тебе надо только посты с аттачами, то и смысла лефт джойна с аттачами тоже нет.
ЗЫ но я не так лефты пишу, раз он левый то присобачиваемую таблицу пишу слева от знака =. Типа эстет.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58693
basename
Скрыть профиль Поместить в игнор-лист
Участник
Горбатый ёж  07.06.2022, 21:37
[игнорируется]
basename [игнорируется] 

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

Смысла лефт джойна тем и постов нет, потому что темя с постами связаны по любому. А так как тебе надо только посты с аттачами, то и смысла лефт джойна с аттачами тоже нет.
ЗЫ но я не так лефты пишу, раз он левый то присобачиваемую таблицу пишу слева от знака =. Типа эстет.
Почему нет? К таблице с постами присоединяем аттачи, потом таблицу с топиками. Из аттачей берём имя аттача, из топиков - id топика и форумный.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58697
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
basename  07.06.2022, 21:41
[игнорируется]
Почему нет?
Потому что лефт покажет записи из постов даже те, у которых нет аттачей.
Зачем тебе они, если ты аттачи ищешь?
И зачем тебе показывать посты, которые не привязаны к топикам (с лефтом именно так ты и делаешь), если это как минимум странно? Как там планы в таком случае это майскуль построит ХЗ.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58701
basename
Скрыть профиль Поместить в игнор-лист
Участник
Горбатый ёж  07.06.2022, 21:44
[игнорируется]
basename  07.06.2022, 21:41
[игнорируется]
Почему нет?
Потому что лефт покажет записи из постов даже те, у которых нет аттачей.
Зачем тебе они, если ты аттачи ищешь?
И зачем тебе показывать посты, которые не привязаны к топикам (с лефтом именно так ты и делаешь), если это как минимум странно? Как там планы в таком случае это майскуль построит ХЗ.
А… понял. Тупой сука. Он же все равно сканит таблицу полностью, потом селект делает. Так?

Он все присоединил вначале, потом просто отобразил, что попросили.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58705
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
basename  07.06.2022, 21:46
[игнорируется]
Он же все равно сканит таблицу полностью, потом селект делает. Так?
ХЗ.
По уму может выбрать посты по юзер_ид, а потом уже к ним присоединить всё остальное.
В любом случае, если ты ищешь аттачи, то лефт убирай.
Ну я я бы всё равно начал с аттачей,как бы привык начинать оттуда, что ищу.
Что-то вроде
Код: SQL
1.
2.
3.
4.
select v1_post.id, v1_post.user_id, v1_post.author, v1_topic.forum_id, v1_post.topic_id, v1_attachment.name
from v1_attachment
join v1_post on v1_post.id = v1_attachment.post_id and v1_post.user_id = '173'
join v1_topic on v1_topic.id = v1_post.topic_id;
...
Изменено: 07.06.2022, 21:52 - Горбатый ёж
Рейтинг: 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 / Господа базоёбы, скок сюды
    #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 / Господа базоёбы, скок сюды
    #58746
basename
Скрыть профиль Поместить в игнор-лист
Участник
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 / Господа базоёбы, скок сюды
    #58753
cat2
Скрыть профиль Поместить в игнор-лист
Участник
Гесты и игнорируемые идут по CSS
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 / Господа базоёбы, скок сюды
    #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 / Господа базоёбы, скок сюды
    #58778
Tammy Jo Saint Cloud
Скрыть профиль Поместить в игнор-лист
Участник
[заблокирован]
PaNik  07.06.2022, 22:01
[игнорируется]
в случае иннер джоина условия соединения равносильны условиям в предложении where и оптимизатор может снача на сотни тысяч записей в таблице постов начать джоинить другие таблицы, что может потребовать выделения значительного объема ОЗУ и сброса результата в tempdb, что не есть продуктивно.
штоблядьзанахуй??????

Простите, был напуган.

это бред, сорян. По крайней мере для скуля (судя по темпдб)
Для мелких серверов с хуевым оптмизатором - может быть правдой.
...
Рейтинг: 0 / 0
MySQL / Господа базоёбы, скок сюды
    #58780
Tammy Jo Saint Cloud
Скрыть профиль Поместить в игнор-лист
Участник
[заблокирован]
PaNik  07.06.2022, 22:01
[игнорируется]
З.з.ы. вышеописанное применительно к ms sql, чего там с оптимизатором mysql - я хз
ага, таки скуль
...
Рейтинг: 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 / Господа базоёбы, скок сюды
    #58784
basename
Скрыть профиль Поместить в игнор-лист
Участник
cat2  07.06.2022, 22:15
[игнорируется]
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
Дык он с нулями выводил, я это и вставил. Правильно или нет - я хз. У вас спрашиваю.
Завязывай спрашивать, делай что советуют
Ок. Подробнее обрисую, подробнее рассмотрим. Я просто запрос сделал согласно доке mysql.
...
Рейтинг: 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 / Господа базоёбы, скок сюды
    #58927
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
PaNik  07.06.2022, 22:01
[игнорируется]
У Бази в первоначальном запросе на таблицу постов накладывается ограничение по юзер_ид
А я предложил его убрать?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Поиск: Искать ответы на сообщение: #58605  
Пользователи онлайн (15): Анонимы (9), Сталкер, Yandex Bot 1 мин., Bing Bot 1 мин., Разум вселенной 2 мин., Кусь 7 мин., Google Bot 8 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


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