powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Соединения таблиц
6 сообщений из 6, страница 1 из 1
Соединения таблиц
    #35610098
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сравнить скорость работы
Код: plaintext
LEFT JOIN
и
Код: plaintext
INNER JOIN
. Понимаю что суть разные вещи, но допустим мы уверены, что NULL мы не получим (допустим есть ограничение). Что тогда выбирать?
Интересует случай, когда условие соединения простое равенство. В случае когда
оба поля проиндексированы

только у одной таблицы

ни у кого
С уважением, Naf
...
Рейтинг: 0 / 0
Соединения таблиц
    #35610110
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafХочу сравнить скорость работы Ответ очевиден.
Скорость будет либо одинаковая, либо LEFT JOIN будет медленне.

Само собой, всякие ошибки оптимизатора - не рассматриваем.
...
Рейтинг: 0 / 0
Соединения таблиц
    #35610177
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naf wrote:

> . Понимаю что суть разные вещи, но допустим мы уверены, что *NULL* мы не
> получим (допустим есть ограничение).

LEFT JOIN потенциаольно может быть медленнее, но не всегда.

Почему - A JOIN B может выполняться физически как A JOIN B или как B JOIN A. A
LEFT JOIN B может выполняться только как A LEFT JOIN B, т.е. внешней таблицей
будет только A (тут правда есть нюансы, когда вы реально применяете не внешнее
соединение). Т.е. условия фильтрации по B применяться эффективно не могут.
Т.е. например у вас есть запрос
Код: plaintext
1.
2.
3.
select *
from A
left join B on A.key = B.key and B.fld1 = XXX

на B.fld1 есть индекс, и условие B.fld1 = XXX возвращает напр. 10 записей,
то всё равно скорее всего таблица A будет сканироваться целиком.

>Что тогда выбирать?

В смысле ? Это ж разные операции, какая вам по логике нужна, ту и выбирайте.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Соединения таблиц
    #35622306
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
В смысле ? Это ж разные операции, какая вам по логике нужна, ту и выбирайте.

я же и пишу, что ситуация такова, что результат одинаков будет гарнтировано.

Спасибо, что ответили.
Можете более подробно описать алгоритм работы LEFT и INNER, на уровне работы сервера БД
...
Рейтинг: 0 / 0
Соединения таблиц
    #35622502
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТ.е. условия фильтрации по B применяться эффективно не могут.
Т.е. например у вас есть запрос
Код: plaintext
1.
2.
3.
select *
from A
left join B on A.key = B.key and B.fld1 = XXX

на B.fld1 есть индекс, и условие B.fld1 = XXX возвращает напр. 10 записей,
то всё равно скорее всего таблица A будет сканироваться целиком.Таблица А будет сканироваться целиком независимо от чего бы то ни было в таблице В, т.к. запрос обязан вернуть все записи из таблицы А.
А вот условия фильтрации по В применяться эффективно вполне могут, достаточно создать нужный индекс. В данном примере - (fld1, key).
...
Рейтинг: 0 / 0
Соединения таблиц
    #35622510
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafМожете более подробно описать алгоритм работы LEFT и INNER, на уровне работы сервера БДЧитайте доки по конкретным СУБД. Этих алгоритмов много. Кроме того, ряд СУБД умеет соединять таблицы по разным алгоритмам, в зависимости от решения оптимизатора.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Соединения таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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