|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Правильно ли я понимаю, грубо говоря, в случае left join ему надо просто к большому куску надо присобачить ещё кусочек, а в случае join, отсечь ненужное из двух кусков и уже их склеить? тогда вроде бы логично, что join дороже и дольше должен выполняться? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:22 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Правильно ли я понимаю, грубо говоря, в случае left join ему надо просто к большому куску надо присобачить ещё кусочек, а в случае join, отсечь ненужное из двух кусков и уже их склеить? тогда вроде бы логично, что join дороже и дольше должен выполняться? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:24 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Соединение будет происходить одинаково в обоих случаях, но LEFT, как правило, возвращает больше записей и поэтому выполняется медленнее ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:24 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Правильно ли я понимаю, грубо говоря, в случае left join ему надо просто к большому куску надо присобачить ещё кусочек, а в случае join, отсечь ненужное из двух кусков и уже их склеить? тогда вроде бы логично, что join дороже и дольше должен выполняться? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:26 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Правильно ли я понимаю, грубо говоря, в случае left join ему надо просто к большому куску надо присобачить ещё кусочек, а в случае join, отсечь ненужное из двух кусков и уже их склеить? тогда вроде бы логично, что join дороже и дольше должен выполняться? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:27 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Обоснуй ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:27 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Хуяссе планы... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:28 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Хуяссе планы... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:29 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
А есть текстовый вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:29 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
а что, и правда надо? это же знания из детского сада ну ладно, что стар, что мал... давайте на секундочку представим, что формальная запись запроса и правда отображает тот порядок, в котором "физически" соединятся таблицы при выполнении запроса тогда для select * from Tab1 left join tab2 on a=b будет один вариант соединения - мы идем по Таб1 и лепим к ней Таб2 а вот для select * from Tab1 left INNER join tab2 on a=b будет уже 2 варианта - идти по таб1 и лепить таб2 - или идти по таб2 и лепить к ней таб1 таким образом "Одинаково в обоих случаях" - немного неправильно. Второй момент - "лефт выполнятеся быстрее, т.к." - во первых не всегда "больше записей" (и как правило - ровно столько же записей - или даже МЕНЬШЕ) во вторых (зависит от случая) лефт может (и будет) читать с диска меньше данных для "правой" таблицы - следовательно, сам по себе запро будет выполнятся быстрее Ну и в некоторых случаях лефт все таки возвращает МЕНЬШЕ записей, чем иннер. upd поправил второй запрос, скопипастил и не заменил лефт на иннер ... |
|||
:
Изменено: 09.06.2022, 16:34 - Tammy Jo Saint Cloud
Нравится:
Не нравится:
|
|||
09.06.2022, 16:31 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
давайте на секундочку представим, что формальная запись запроса и правда отображает тот порядок, в котором "физически" соединятся таблицы при выполнении запроса Или это любители хинтовать запросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:34 |
|
Господа базоёбы, скок сюды
#60321
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
Ссылка на вложение:
Ссылка на вложение 2:
|
|||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#18+
В тектовом виде такое. Оно? или что должно быть? ... |
|||||||||||||||||||
:
Нравится:
Не нравится:
|
|||||||||||||||||||
09.06.2022, 16:34 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
давайте на секундочку представим, что формальная запись запроса и правда отображает тот порядок, в котором "физически" соединятся таблицы при выполнении запроса Или это любители хинтовать запросы? "ДАвайте ПРЕДСТАВИМ", для целей демонстрации ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:35 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
В тектовом виде такое. Оно? или что должно быть? Но прям такое впечатление, что оптимизатору похую, что джойн, что лефт джойн. "ДАвайте ПРЕДСТАВИМ" ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:38 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
а вот для select * from Tab1 left join tab2 on a=b будет уже 2 варианта - идти по таб1 и лепить таб2 - или идти по таб2 и лепить к ней таб1 таким образом "Одинаково в обоих случаях" - немного неправильно. То есть. Если у нас таблицы Post и Attachment, то в Post должен быть индекс по Attachment_Id. Не думаю, что кто-нибудь будет такой индекс делать ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:39 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Это пагубный подход в обучении. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:41 |
|
Господа базоёбы, скок сюды
|
|
---|---|
#18+
Если у нас таблицы Post и Attachment, то в Post должен быть индекс по Attachment_Id. Не думаю, что кто-нибудь будет такой индекс делать ... |
|
:
|
|
09.06.2022, 16:41 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Второй вариант может выполнятся или на коротких таблицах, когда оптимизатор решит, что использовать индексы тут нет нужды, или когда в первой таблице есть индекс по полю второй таблицы. Я могу показать как минимум несколько вариантов - с большими таблицами, с маленькими, с индексами, без индексов и так далее. "второй вариант" показывает, что план выполнения иннер джойна может варьироваться по последовательности соединений (лефт тоже может,но для простоты мы это не учитываем) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:43 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Нормальный человек будет делать индекс на FK. В некоторых случаях нормальный человек НИКОГДА не будет делать индекс на ФК ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:43 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
В некоторых случаях нормальный человек НИКОГДА не будет делать индекс на ФК ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:45 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Второй вариант может выполнятся или на коротких таблицах, когда оптимизатор решит, что использовать индексы тут нет нужды, или когда в первой таблице есть индекс по полю второй таблицы. Я могу показать как минимум несколько вариантов - с большими таблицами, с маленькими, с индексами, без индексов и так далее. "второй вариант" показывает, что план выполнения иннер джойна может варьироваться по последовательности соединений (лефт тоже может,но для простоты мы это не учитываем) Я тоже могу придумать способ, когда никаких индексов нет и INNER с OUTER будут выполнятся за одно и тоже время. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:48 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Нормальный человек будет делать индекс на FK. В некоторых случаях нормальный человек НИКОГДА не будет делать индекс на ФК Дофига способов построить кривую базу, но вовсе не надо применять их всех! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:50 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Горбатый ёж [игнорируется] Вот ещё вывод explain analyze Как только в читабельном виде отобразить... join Цитата [игнорируется] '-> Nested loop inner join (cost=473.95 rows=424) (actual time=0.235..3.066 rows=197 loops=1)\n -> Nested loop inner join (cost=325.38 rows=369) (actual time=0.154..1.790 rows=369 loops=1)\n -> Index lookup on v1_post using v1_post_user_id_idx (user_id=173) (cost=196.23 rows=369) (actual time=0.144..1.183 rows=369 loops=1)\n -> Single-row index lookup on v1_topic using PRIMARY (id=v1_post.topic_id) (cost=0.25 rows=1) (actual time=0.001..0.001 rows=1 loops=369)\n -> Index lookup on v1_attachment using v1_attachment_unq (post_id=v1_post.id) (cost=0.29 rows=1) (actual time=0.003..0.003 rows=1 loops=369)\n' Цитата [игнорируется] '-> Nested loop left join (cost=419.06 rows=212) (actual time=0.137..2.520 rows=197 loops=1)\n -> Nested loop inner join (cost=344.79 rows=212) (actual time=0.130..1.888 rows=197 loops=1)\n -> Index lookup on v1_post using v1_post_user_id_idx (user_id=173) (cost=196.21 rows=369) (actual time=0.093..0.869 rows=369 loops=1)\n -> Filter: (v1_attachment.`name` is not null) (cost=0.29 rows=1) (actual time=0.002..0.003 rows=1 loops=369)\n -> Index lookup on v1_attachment using v1_attachment_unq (post_id=v1_post.id) (cost=0.29 rows=1) (actual time=0.002..0.002 rows=1 loops=369)\n -> Single-row index lookup on v1_topic using PRIMARY (id=v1_post.topic_id) (cost=0.25 rows=1) (actual time=0.003..0.003 rows=1 loops=197)\n' ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 16:54 |
|
Господа базоёбы, скок сюды
|
|||
---|---|---|---|
#18+
Горбатый ёж [игнорируется] Вот ещё вывод explain analyze Как только в читабельном виде отобразить... join Цитата [игнорируется] '-> Nested loop inner join (cost=473.95 rows=424) (actual time=0.235..3.066 rows=197 loops=1)\n -> Nested loop inner join (cost=325.38 rows=369) (actual time=0.154..1.790 rows=369 loops=1)\n -> Index lookup on v1_post using v1_post_user_id_idx (user_id=173) (cost=196.23 rows=369) (actual time=0.144..1.183 rows=369 loops=1)\n -> Single-row index lookup on v1_topic using PRIMARY (id=v1_post.topic_id) (cost=0.25 rows=1) (actual time=0.001..0.001 rows=1 loops=369)\n -> Index lookup on v1_attachment using v1_attachment_unq (post_id=v1_post.id) (cost=0.29 rows=1) (actual time=0.003..0.003 rows=1 loops=369)\n' Цитата [игнорируется] '-> Nested loop left join (cost=419.06 rows=212) (actual time=0.137..2.520 rows=197 loops=1)\n -> Nested loop inner join (cost=344.79 rows=212) (actual time=0.130..1.888 rows=197 loops=1)\n -> Index lookup on v1_post using v1_post_user_id_idx (user_id=173) (cost=196.21 rows=369) (actual time=0.093..0.869 rows=369 loops=1)\n -> Filter: (v1_attachment.`name` is not null) (cost=0.29 rows=1) (actual time=0.002..0.003 rows=1 loops=369)\n -> Index lookup on v1_attachment using v1_attachment_unq (post_id=v1_post.id) (cost=0.29 rows=1) (actual time=0.002..0.002 rows=1 loops=369)\n -> Single-row index lookup on v1_topic using PRIMARY (id=v1_post.topic_id) (cost=0.25 rows=1) (actual time=0.003..0.003 rows=1 loops=197)\n' ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2022, 17:11 |
|
|
start [/forum/topic.php?fid=8&msg=60308&tid=2074]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
366ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
136ms |
get tp. blocked users: |
2ms |
others: | 22ms |
total: | 577ms |
0 / 0 |