Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Оптимизация sql-запроса с множественными join  [new]
talja
Member

Откуда: Krasnoyarsk
Сообщений: 54
Всем доброго времени суток!
Коллеги, нужен профессиональный совет.
Есть запрос, в котором несколько полей (cl1, cl2,cl3) одной таблицы (tab1) связаны с другой таблицей (tab2).
В итоге, чтобы вывести данные нужно выполнить запрос вида

select * from
tab1 as t1
left outer join
tab2 as t2
on t1.cl1=t2.col1
left outer join
tab2 as t3
on t1.cl2=t3.col1
left outer join
tab2 as t4
on t1.cl3=t4.col1

Получается очень трудный для восприятия запрос.
Есть ли способы оптимизации? может, кто уже задумывался над подобным?

Спасибо
3 фев 15, 18:03    [17213887]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
talja,

Трудный для кого, для сервера или для вас?
3 фев 15, 18:13    [17213945]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
baza906
Member

Откуда:
Сообщений: 283
talja, вероятно, результат труден для восприятия? Не избыточен ли он?
3 фев 15, 18:55    [17214130]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
shpigel
Member

Откуда: Lviv
Сообщений: 15
talja,
вполне нормальный запрос, если нормально отформатировать - то вообще легкий :)

SELECT *
FROM
  tab1 AS t1
  LEFT JOIN tab2 AS t2 ON (t2.col1 = t1.cl1)
  LEFT JOIN tab2 AS t3 ON (t3.col1 = t1.cl2)
  LEFT JOIN tab2 AS t4 ON (t4.col1 = t1.cl3)
3 фев 15, 19:25    [17214262]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
talja
Member

Откуда: Krasnoyarsk
Сообщений: 54
Запрос должен содержать данные из нескольких таблиц. Поэтому результат, действительно содержит много данных.
Сам текст запроса трудно воспринимается. Если через пару месяцев такую вьюшку придется редактировать да еще и не мне....
Вот и пришла идея как-то переписать проще. Для случая, join'а разных полей к одной и той же таблице.
4 фев 15, 01:50    [17215162]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
select t1.cl1,t1.cl2,t1.cl3
,max(case when t1.cl1 = t2.col1 then t1.cl1 else null end) as col1
,max(case when t1.cl2 = t2.col1 then t1.cl2 else null end) as col2
,max(case when t1.cl3 = t2.col1 then t1.cl3 else null end) as col3
from @tab1 as t1
left outer join @tab2 as t2
on t2.col1 in (t1.cl1,t1.cl2,t1.cl3)
group by t1.cl1,t1.cl2,t1.cl3
4 фев 15, 07:17    [17215293]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
declare @tab1 table (cl1 int,cl2 int,cl3 int)
declare @tab2 table (col1 int)
insert into @tab1 values(1,1,3),(2,2,5),(7,8,9),(10,11,6)
insert into @tab2 values(1),(2),(3),(4),(5),(6) 


select * from
@tab1 as t1
left outer join
@tab2 as t2
on t1.cl1=t2.col1
left outer join
@tab2 as t3
on t1.cl2=t3.col1
left outer join
@tab2 as t4
on t1.cl3=t4.col1


select t1.cl1,t1.cl2,t1.cl3
,max(case when t1.cl1 = t2.col1 then t1.cl1 else null end) as col1
,max(case when t1.cl2 = t2.col1 then t1.cl2 else null end) as col2
,max(case when t1.cl3 = t2.col1 then t1.cl3 else null end) as col3
from @tab1 as t1
left outer join @tab2 as t2
on t2.col1 in (t1.cl1,t1.cl2,t1.cl3)
group by t1.cl1,t1.cl2,t1.cl3
4 фев 15, 07:18    [17215294]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
aleks2
Guest
1. Если тредстартеру кажется непонятным его собственный запрос - этот ваще загадкой будет.
2. Этот запрос хуже по нагрузке на сервер.
4 фев 15, 08:34    [17215387]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
aleks2
1. Если тредстартеру кажется непонятным его собственный запрос - этот ваще загадкой будет.
2. Этот запрос хуже по нагрузке на сервер.

ну дык мы просто за художественный подход к делу :)
4 фев 15, 08:47    [17215403]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31970
talja
Сам текст запроса трудно воспринимается
Дык надо просто форматировать правильно.

Если бы в одну строку написали, воспринималось бы ещё хуже :-) Или каждое слово на новой строке.
Ещё странная привычка - писать on t1.cl2=t3.col1 вместо on t3.col1 = t1.cl2, тоже дделает запрос непонятнее.

Ещё нужно придумывать понятные названия для таблиц и полей, вкупе с правильным форматированием и комментариями это сделает дальнейшую работу с кодом лёгкой и приятной.

А хранение кода в средствах версионного контроля, со связями с задачами, тестами и т.д., возможность сравнения версий, одновременно с описанием, для чего это изменение делалось, кто ставил задачу, и кто тестировал результат, облегчит работу не только программистов, но и управление системой.
4 фев 15, 08:55    [17215417]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
alexeyvg
Ещё странная привычка - писать on t1.cl2=t3.col1 вместо on t3.col1 = t1.cl2, тоже дделает запрос непонятнее.

То чувство, когда встречаешь человека на необитаемом острове, после года общения с обезьянами.
4 фев 15, 15:23    [17217735]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3754
Это автор еще староверов ораклоидов не встречал.
С их джоинами через запятую и килметровым where блэкджеком и плюсиками....
4 фев 15, 22:40    [17219696]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
Алекс1975
Member

Откуда: Россия
Сообщений: 2
ROLpogo, бывал там? ))
5 фев 15, 06:14    [17220218]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация sql-запроса с множественными join  [new]
Алекс1975
Member

Откуда: Россия
Сообщений: 2
talja,

запрос как запрос
5 фев 15, 06:21    [17220222]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить