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

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

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

Сообщение Kotъ-Begemotъ » 13 фев 2008, 00:26

Как вы считаете, с точки зрения производительности что будет лучше - один 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 не обойтись, так как реально может не быть соответствия...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2008, 00:43

people - люди, уже множественное число. соответственно "peoples" это грамматическая ошибка.

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

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 13 фев 2008, 01:20

kdv писал(а):people - люди, уже множественное число. соответственно "peoples" это грамматическая ошибка.

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2008, 03:37

производительность падает здорово при использовании LEFT (RIGHT) по сравнению с INNER...
потому что думать надо, и план запроса смотреть. left/right надо в правильном порядке ставить. для inner порядок не имеет значения, а для left/right - очень даже.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 13 фев 2008, 03:41

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

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 13 фев 2008, 14:43

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

Ответить