|
LEFT JOIN + WHERE vs INNER JOIN - в чем разница (дотошно)
|
|||
---|---|---|---|
#18+
Привет. Меня интересует именно практическая сторона - то есть вопросы оптимизации. Будет ли реально INNER JOIN оптимальнее чем LEFT JOIN + WHERE и в каких случаях? Workaround Я почитал разную инфу на stackoverflow по этому вопросу, но зачастую объяснения не уходят вглубь или остаются лишь теориями и предположениями, которые никто не подтвердил. Есть такой топик: https://stackoverflow.com/questions/186071/left-join-outperforming-inner-join В котором более менее человек старается что-то проверить. Смысл сводится к тому, что LEFT JOIN + WHERE быстрее, чем INNER JOIN. И есть там предпоследний ответ, который не был проверен: В нем предлагается переместить INNER JOIN вперед всех других соединений и то что было в WHERE полностью перенести в ON-clause: Dannie JugeThat should give you an extra performance because: You put all the inner joins before any "left" or "right" join appears. This filters out some records before applying the subsequent outer joins The short-circuit of the "AND" operators (order of the "AND" matters). If the comparition between the columns and the literals is false, it won't execute the required table scan for the comparition between the tables PKs and FKs Кто что по этому поводу имеет сказать? Может даже есть что то про это почитать. на том же overflow? Не нашел пока. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 19:41 |
|
LEFT JOIN + WHERE vs INNER JOIN - в чем разница (дотошно)
|
|||
---|---|---|---|
#18+
Интересно как это в Oracle. Но и как это в других БД тоже интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 19:43 |
|
LEFT JOIN + WHERE vs INNER JOIN - в чем разница (дотошно)
|
|||
---|---|---|---|
#18+
_Промешан_Интересно как это в Oracle. В Oracle есть три базовых алгоритма для выполнения соединений, каждый из которых имеет по нескольку вариаций, и куча вариантов доступа к данным. Перемножив одно на другое получите довольно большое количество способов, которыми Oracle может выполнить конкретный sql-запрос, даже не рассматривая многочисленные трансформации, которые могут быть применены к исходному тексту. А если в соединении участвует более 3-4 таблиц, да на каждой по нескольку индексов, то протокол работы CBO по построению плана запроса глазами читать придется до морковкина заговения - столько вариантов он переберет пока на чем-то остановится... В этой связи рассуждать на заданную тему "вообще" лучше в ближайшем "магическом салоне", привлекая в качестве пруфов хрустальные шары различных моделей и карты таро... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 19:55 |
|
LEFT JOIN + WHERE vs INNER JOIN - в чем разница (дотошно)
|
|||
---|---|---|---|
#18+
_Промешан_Смысл сводится...Dannie Juge...Или автор не обладает компетенциями, чтобы сысл сходился, или mysql не стоит вообще сравнивать с субд. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 20:25 |
|
LEFT JOIN + WHERE vs INNER JOIN - в чем разница (дотошно)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 21:43 |
|
LEFT JOIN + WHERE vs INNER JOIN - в чем разница (дотошно)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2019, 02:09 |
|
LEFT JOIN + WHERE vs INNER JOIN - в чем разница (дотошно)
|
|||
---|---|---|---|
#18+
Уже всё ответили до меня. Могу лишь добавить общих суждений. Нужно рассматривать каждый запрос отдельно, нельзя так сказать что если "фаза луны =2", то используйте INNER иначе LEFT. Есть данные, есть запрос, понимание как запрос сделать оптимальнее и есть план оракла. Если планы при использовании Inner и LEFT отличаются, то нужно смотреть какой будет оптимальнее и почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2019, 07:53 |
|
LEFT JOIN + WHERE vs INNER JOIN - в чем разница (дотошно)
|
|||
---|---|---|---|
#18+
_Промешан_run09_Промешан_, 20168262 ссылка на книгу есть, но где ее там скачать не нашел.Только сегодня, только для тебя, на блюдечке . ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2019, 10:46 |
|
|
start [/forum/topic.php?fid=52&fpage=83&tid=1882749]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 143ms |
0 / 0 |