Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Kotъ-Begemotъ
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Сообщение
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
Разговор о лукап-полях даже не идёт. Проиграет запросу всегда.
Кроме случая, когда ты одно-два значения берёшь из детайла, а не многие.