Страница 1 из 1

Что лучше - один запрос с LEFT JOINами или Lookup поля?

Добавлено: 13 фев 2008, 00:26
Kotъ-Begemotъ
Как вы считаете, с точки зрения производительности что будет лучше - один DataSet с запросом вида:

Код: Выделить всё

SELECT U.UNITID, U.UNITNAME, U.PEOPLEID, U.CARID, U.TAXID, U.UNITSTATE,
       U.LSTIME, U.REGID, U.LASTIN, U.LOCKED, U.VGRPID, U.HOME, U.REORDERED,
       U.GRAPHID,
       S.STATECOLOR, S.CALLCOLOR, S.STATENAME, S.BGCOLOR, S.TIMECOLOR,
       S.VIPCOLOR,
       P.BDAY,
       T.TMP,
       CR.CARCLASS
FROM UNITS U
LEFT JOIN STATES S
 ON (S.STATEID = U.UNITSTATE)
LEFT JOIN PEOPLES P
 ON (P.PEOPLEID = U.PEOPLEID)
LEFT JOIN TAXREF T
 ON (T.TAXID = U.TAXID)
LEFT JOIN CARS CR
 ON (CR.CARID = U.CARID)

WHERE U.UNITSTATE <> 10
или соответствующее количество DataSet'ов и Lookup поля в главном датасете к необходимым данным? Суть в том, что без LEFT JOIN не обойтись, так как реально может не быть соответствия...

Добавлено: 13 фев 2008, 00:43
kdv
people - люди, уже множественное число. соответственно "peoples" это грамматическая ошибка.

насчет left join - а почему все по left join? т.е. бывают машины без налогов, налоги без людей, люди без состояний, состояния без "модулей"?

Добавлено: 13 фев 2008, 01:20
Kotъ-Begemotъ
kdv писал(а):people - люди, уже множественное число. соответственно "peoples" это грамматическая ошибка.

насчет left join - а почему все по left join? т.е. бывают машины без налогов, налоги без людей, люди без состояний, состояния без "модулей"?
Нет конечно, это я для упрощения такой запрос показал. Реально в первую очередь будут по LJ тащиться данные о текущем заказе этого водителя. Но его может и не быть, если водитель свободен или обедает... К примеру. Название таблицы - не суть, хоть горсшом, как говорится назови... Но за подсказку спасибо, подправлю. Просто действительно часто обычного JOIN не хватает, приходится LEFT использовать, а вот производительность падает здорово при использовании LEFT (RIGHT) по сравнению с INNER...

Добавлено: 13 фев 2008, 03:37
kdv
производительность падает здорово при использовании LEFT (RIGHT) по сравнению с INNER...
потому что думать надо, и план запроса смотреть. left/right надо в правильном порядке ставить. для inner порядок не имеет значения, а для left/right - очень даже.

Добавлено: 13 фев 2008, 03:41
Kotъ-Begemotъ
kdv писал(а):
производительность падает здорово при использовании LEFT (RIGHT) по сравнению с INNER...
потому что думать надо, и план запроса смотреть. left/right надо в правильном порядке ставить. для inner порядок не имеет значения, а для left/right - очень даже.
То есть ты не исключаешь возможности, что даже с LEFT JOIN к нескольким таблицам запрос возможно будет предпочтительнее, чем цепляться к другим датасетам lookup-полями?

Добавлено: 13 фев 2008, 14:43
WildSery
Разговор о лукап-полях даже не идёт. Проиграет запросу всегда.
Кроме случая, когда ты одно-два значения берёшь из детайла, а не многие.