Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Что лучше join-ить (число прочтений - 2880 )
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Что лучше join-ить
03. Июня 2008 :: 11:04
Печать  
Вот к примеру запрос:
Код
Выбрать все
	ТекстЗапроса="
	|SELECT top 100
	|	SUM($Партии.СуммаПродажиРуб)
	|FROM
	|	$Регистр.ПартииТоваров AS Партии
	|INNER JOIN
	|	_1SJourn AS Журнал ON Партии.IDDOC=Журнал.IDDOC
	|	AND Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~
	|WHERE
	|	$Партии.КодОперации = :Операция_ПродажаРозница
	|	AND $Партии.Склад = :ВыбСклад"; 


Как лучше, как есть или селект делать к журналу и джойнить партии по условиям? И как вообще правильно определить, что брать на селект, а что присоединять? Из каких побуждений исходить в данном случае?
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Что лучше join-ить
Ответ #1 - 03. Июня 2008 :: 11:36
Печать  
zenik писал(а) 03. Июня 2008 :: 11:04:
Как лучше, как есть или селект делать к журналу и джойнить партии по условиям? И как вообще правильно определить, что брать на селект, а что присоединять? Из каких побуждений исходить в данном случае?

ИМХО, лучше выборку строить к таблице, из которой меньше объем выборки получится
  
Наверх
ICQ  
IP записан
 
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Re: Что лучше join-ить
Ответ #2 - 03. Июня 2008 :: 11:48
Печать  
А кто нибудь может по шагам описать в каком порядке будет осуществляться выборка по данному запросу? Т.е. в каком порядке будут обработаны условия условия и джойны.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Что лучше join-ить
Ответ #3 - 03. Июня 2008 :: 11:50
Печать  
zenik писал(а) 03. Июня 2008 :: 11:04:
что брать на селект, а что присоединять?

Абсолютно без разницы. Как тебе удобнее читать - так и пиши.

ps
особо порадовало "брать на селект"  Улыбка
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Что лучше join-ить
Ответ #4 - 03. Июня 2008 :: 11:55
Печать  
zenik писал(а) 03. Июня 2008 :: 11:48:
А кто нибудь может по шагам описать в каком порядке будет осуществляться выборка по данному запросу? Т.е. в каком порядке будут обработаны условия условия и джойны.

Порядок и тип соединения будет выбирать оптимизатор сервера.
А поведать об этом он тебе может через план выполнения запроса. План ты можешь посмотреть например в QA.
  

1&&2&&3
Наверх
 
IP записан
 
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Re: Что лучше join-ить
Ответ #5 - 03. Июня 2008 :: 12:18
Печать  
trad писал(а) 03. Июня 2008 :: 11:55:
Порядок и тип соединения будет выбирать оптимизатор сервера.
А поведать об этом он тебе может через план выполнения запроса. План ты можешь посмотреть например в QA.


Спасибо. А то уже несколько раз задавался таким вопросом, а тут все таки решил спросить.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Что лучше join-ить
Ответ #6 - 03. Июня 2008 :: 13:27
Печать  
Все эти джойны можно и не делать, перечислив все нужные тебе таблицы  в секции FROM, и далее в секции WHERE делать условия:
Left Join эквивалентен *=
Right Join эквивалентен =*
Inner - =

поправьте ментя, если что-то не так
  
Наверх
 
IP записан
 
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Re: Что лучше join-ить
Ответ #7 - 03. Июня 2008 :: 14:15
Печать  
JohnyDeath писал(а) 03. Июня 2008 :: 13:27:
Все эти джойны можно и не делать, перечислив все нужные тебе таблицы  в секции FROM, и далее в секции WHERE делать условия:
Left Join эквивалентен *=
Right Join эквивалентен =*
Inner - =

поправьте ментя, если что-то не так

Кто что советует... http://www.1cpp.ru/forum/YaBB.pl?num=1207733813/7#7 Поди вас потом разбери, как правильно...
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Что лучше join-ить
Ответ #8 - 03. Июня 2008 :: 14:27
Печать  
zenik писал(а) 03. Июня 2008 :: 14:15:
JohnyDeath писал(а) 03. Июня 2008 :: 13:27:
Все эти джойны можно и не делать, перечислив все нужные тебе таблицы  в секции FROM, и далее в секции WHERE делать условия:
Left Join эквивалентен *=
Right Join эквивалентен =*
Inner - =

поправьте ментя, если что-то не так

Кто что советует... http://www.1cpp.ru/forum/YaBB.pl?num=1207733813/7#7 Поди вас потом разбери, как правильно...


Есть еще понятие читабельности запроса Подмигивание
  
Наверх
 
IP записан
 
FAM
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 19. Мая 2006
Re: Что лучше join-ить
Ответ #9 - 04. Июня 2008 :: 02:40
Печать  
А еще лучше поставить галку на регистры "быстрая обработка движений" и вообще _1SJourn не джоинить...
  
Наверх
 
IP записан
 
unnamed
Full Member
***
Отсутствует


0x1c = 28

Сообщений: 166
Местоположение: Chelyabinsk
Зарегистрирован: 01. Ноября 2007
Пол: Мужской
Re: Что лучше join-ить
Ответ #10 - 04. Июня 2008 :: 03:56
Печать  
FAM писал(а) 04. Июня 2008 :: 02:40:
А еще лучше поставить галку на регистры "быстрая обработка движений" и вообще _1SJourn не джоинить...

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

ps. привет Подмигивание
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Что лучше join-ить
Ответ #11 - 04. Июня 2008 :: 04:19
Печать  
unnamed писал(а) 04. Июня 2008 :: 03:56:
FAM писал(а) 04. Июня 2008 :: 02:40:
А еще лучше поставить галку на регистры "быстрая обработка движений" и вообще _1SJourn не джоинить...

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

ps. привет Подмигивание



Поле дата при быстрой обработке движений занимает <15% таблицы. + индекс.
Соотношение чтение/запись 50/1 минимум (при активно вколачивающих документах)
Использование этого поля целесообразно в 50% случаев

В 25 случаях существенный выигрыш(до нескольких раз, если только часть док делает движения
по регистру) на 1 случай 15% проигрыша.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Что лучше join-ить
Ответ #12 - 04. Июня 2008 :: 06:05
Печать  
zenik писал(а) 03. Июня 2008 :: 14:15:
JohnyDeath писал(а) 03. Июня 2008 :: 13:27:
Все эти джойны можно и не делать, перечислив все нужные тебе таблицы  в секции FROM, и далее в секции WHERE делать условия:
Left Join эквивалентен *=
Right Join эквивалентен =*
Inner - =

поправьте ментя, если что-то не так

Кто что советует... http://www.1cpp.ru/forum/YaBB.pl?num=1207733813/7#7 Поди вас потом разбери, как правильно...

Я не советовал, я говорил, что такой вариант будет идентичен твоему. Как тебе удобней - так и делай.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать