Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
06.12.2001, 09:40
|
|||
|---|---|---|---|
подскажите что оптимальней подзапрос или объединение? |
|||
|
#18+
Уважаемые коллеги, подскажите что оптимальней подзапрос или объединение? Есть таблица T1 со структурой: int ID, varchar Name int LinkToT2 (ссылка на T2) Есть таблица T2 со структурой: int ID, varchar Name Нужно сделать запрос к T1, ну и заодно вытащить данные из T2 Какой запрос будет опримальнее и почему? select T1.ID, T1.Name, (select Name from T2 where T1.LinkToT2=T2.ID) as T2Name from T1 или select T1.ID, T1.Name, T2.Name as T2Name from T1 inner join T2 on T1.LinkToT2=T1.ID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.12.2001, 10:30
|
|||
|---|---|---|---|
|
|||
подскажите что оптимальней подзапрос или объединение? |
|||
|
#18+
Не могу понять откуда мог появиться вариант 1. INNER JOIN однозначно. Даже на тысяче записей в QA ответ, я думаю, был бы очевиден. ЗЫ. (Может я не уловил суть вопроса?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.12.2001, 14:15
|
|||
|---|---|---|---|
подскажите что оптимальней подзапрос или объединение? |
|||
|
#18+
Спасибо. В свое оправдание скажу что ответ был нужен моему коллеге, которому было нужно услышать более авторитетное мнение чем мое. Думаю, топик исчерпан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.12.2001, 14:48
|
|||
|---|---|---|---|
подскажите что оптимальней подзапрос или объединение? |
|||
|
#18+
Если связь между таблицами 1-1, то конечно INNER JOIN - это правильное решение, а вот если 1-много, то IMHO не все так однозначно Например, нужно вывести T1.ID, T1.Name с T2.Name, у которого наибольшее количество записей Если использовать select T1.ID, T1.Name, T2.Name as T2Name, COUNT(*) from T1 inner join T2 on T1.LinkToT2=T1.ID GROUP BY T1.ID, T1.Name, T2.Name то для каждого T1.ID, T1.Name выберутся все варианты T2.Name, а не один А вот данный запрос select T1.ID, T1.Name, (SELECT TOP 1 T2.Name FROM T2 WHERE T1.LinkToT2=T2.ID GROUP BY T2.Name ORDER BY COUNT(*) DESC) as T2Name from T1 выберет как раз то, что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.12.2001, 14:50
|
|||
|---|---|---|---|
|
|||
подскажите что оптимальней подзапрос или объединение? |
|||
|
#18+
На самом деле, эти запросы потенциально могут вернуть разные наборы данных. 1-ый запрос - это аналог LEFT OUTER JOIN, а 2-ой - как есть INNER JOIN За этим ходить далеко не надо, достаточно посмотреть графические планы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1824700]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 357ms |

| 0 / 0 |
