|
Что быстрее будет работать в Запросе? | ☑ | ||
---|---|---|---|---|
0
News
10.04.12
✎
17:28
|
Доброго времени суток. Подскажите пжл, кто хорошо знает запросы. Что будет быстрее работать с большими объемами данными.
1. Запрос через левое соединение с Регистром накопления и справочником Номенклатура контрагент таб часть Товар? ВЫБРАТЬ НоменклатураКонтрагентаТовар.Номенклатура, РегистрНакопления1ОстаткиИОбороты.КоличествоПриход, РегистрНакопления1ОстаткиИОбороты.КоличествоРасход, РегистрНакопления1ОстаткиИОбороты.КоличествоКонечныйОстаток ИЗ Справочник.НоменклатураКонтрагента.Товар КАК НоменклатураКонтрагентаТовар ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты КАК РегистрНакопления1ОстаткиИОбороты ПО НоменклатураКонтрагентаТовар.Номенклатура = РегистрНакопления1ОстаткиИОбороты.Товар 2. Или дополнительное объединение Справочника номенклатура Контрагентов таб. часть Товар с таблицей справочника Номенклатура, где будут отсекаться задвоенные позиции номенлкатуры ВЫБРАТЬ НоменклатураКонтрагентаТовар.Номенклатура, РегистрНакопления1ОстаткиИОбороты.КоличествоПриход, РегистрНакопления1ОстаткиИОбороты.КоличествоРасход, РегистрНакопления1ОстаткиИОбороты.КоличествоКонечныйОстаток, Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НоменклатураКонтрагента.Товар КАК НоменклатураКонтрагентаТовар ПО Номенклатура.Ссылка = НоменклатураКонтрагентаТовар.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты КАК РегистрНакопления1ОстаткиИОбороты ПО Номенклатура.Ссылка = РегистрНакопления1ОстаткиИОбороты.Товар |
|||
1
News
10.04.12
✎
17:29
|
запрос будет в Компоновке использоваться
|
|||
2
х86
10.04.12
✎
17:30
|
(0)джойны поттупливают
объединить юзай |
|||
3
х86
10.04.12
✎
17:30
|
(1)а большой объем данных это сколько в записях?
|
|||
4
acsent
10.04.12
✎
17:31
|
(2) это если в индекс не попадаешь
|
|||
5
acsent
10.04.12
✎
17:31
|
второй вариант вообще бессмысленный
|
|||
6
News
10.04.12
✎
17:31
|
(3) десятки тысяч
|
|||
7
acsent
10.04.12
✎
17:32
|
лучше возьми отдельно остатки и отдельно обороты
|
|||
8
Deon
10.04.12
✎
17:32
|
(5) Он каким-то образом дубли отсекать должен
|
|||
9
acsent
10.04.12
✎
17:33
|
нужно использовать ключевое слова "ОТСЕКАТЬ"
|
|||
10
х86
10.04.12
✎
17:33
|
(6)но меньше сотни тысяч?
|
|||
11
News
10.04.12
✎
17:35
|
(8) в таб. часте Товар в справочнике Контрагенты могут по разным контрагентам совпадать позиции товара и получается в первом варианте может один и тот же товар соединяться с таблицей регистра несколько раз..
|
|||
12
News
10.04.12
✎
17:36
|
(10) возможно
|
|||
13
Humandra
10.04.12
✎
17:36
|
(5) +1, бессмысленный лишний джойн, а вовсе не объединение, как сказано в (0). Не путайте union и join (объединить и соединить)
|
|||
14
Humandra
10.04.12
✎
17:37
|
(11) Или вы забыли нам показать еще и часть, где описаны дополнительные условия отбора, или вы сильно не правы :)
|
|||
15
News
10.04.12
✎
17:38
|
(13) мне сказали что второй вариант в (0) предпочительнее чем первый по причине в (11)
|
|||
16
Deon
10.04.12
✎
17:39
|
(15) На кол посади того, кто сказал
|
|||
17
Humandra
10.04.12
✎
17:39
|
(16) + много раз. Или покажите полный запрос.
|
|||
18
Deon
10.04.12
✎
17:39
|
Кстати, господа, а в этих запросах табличка ОстаткиИОбороты будет строиться по вообще всем записям регистра?
|
|||
19
News
10.04.12
✎
17:42
|
(14) это запрос в компоновке, запрос весь я не привел, а привел только то, что мне не совсем понятно, а именно почему (2) будет работать быстрее при больших объемах данных, ведь по сути я же соединяю еще дополнительную таблицу внутренним соединением
|
|||
20
azernot
10.04.12
✎
17:44
|
ВЫБРАТЬ
РегистрНакопления1ОстаткиИОбороты.Товар, РегистрНакопления1ОстаткиИОбороты.КоличествоПриход, РегистрНакопления1ОстаткиИОбороты.КоличествоРасход, РегистрНакопления1ОстаткиИОбороты.КоличествоКонечныйОстаток ИЗ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты(,,,Товар в (Выбрать различные НоменклатураКонтрагентаТовар.Номенклатура из Справочник.НоменклатураКонтрагента.Товар как НоменклатураКонтрагентаТовар)) КАК РегистрНакопления1ОстаткиИОбороты |
|||
21
Humandra
10.04.12
✎
17:44
|
(19) Покажите все же полный запрос, от этого многое меняется. Возможно, что условия отбора выполняются по таблице Номенклатуры, тогда джойн уместен может быть. Или еще что.
|
|||
22
Deon
10.04.12
✎
17:45
|
(20) Значит в (18) все-таки по всем записям.
|
|||
23
News
10.04.12
✎
17:46
|
(21) немного соврал, вот так:
ВЫБРАТЬ табНоменклатура.Ссылка КАК Номенклатура, РегистрНакопления1ОстаткиИОбороты.КоличествоПриход, РегистрНакопления1ОстаткиИОбороты.КоличествоРасход, РегистрНакопления1ОстаткиИОбороты.КоличествоКонечныйОстаток, табНоменклатура.Ссылка ИЗ Справочник.Номенклатура КАК табНоменклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НоменклатураКонтрагента.Товар КАК НоменклатураКонтрагентаТовар ПО табНоменклатура.Ссылка = НоменклатураКонтрагентаТовар.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты КАК РегистрНакопления1ОстаткиИОбороты ПО табНоменклатура.Ссылка = РегистрНакопления1ОстаткиИОбороты.Товар |
|||
24
Deon
10.04.12
✎
17:47
|
А чего изменилось-то?
|
|||
25
sergeante
10.04.12
✎
17:48
|
(18) (22) а як жешь, по всем записям вестимо. ПВТ ж нет
|
|||
26
News
10.04.12
✎
17:48
|
номенклатура не из справочника Контаргенты во втором случае, а из самого справочника Номенклатура
|
|||
27
Humandra
10.04.12
✎
17:48
|
(23) В таком варианте написания я не вижу ни малейшего смысла в запросе
|
|||
28
News
10.04.12
✎
17:51
|
(20) а так будет быстрее работать чем через соединение с самое таблицей?
|
|||
29
Deon
10.04.12
✎
17:52
|
Кстати, а я правильно понимаю, что в принципе это:
СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты КАК РегистрНакопления1ОстаткиИОбороты ПО табНоменклатура.Ссылка = РегистрНакопления1ОстаткиИОбороты.Товар работает быстрее, чем это: СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты КАК РегистрНакопления1ОстаткиИОбороты ПО НоменклатураКонтрагентаТовар.Номенклатура = РегистрНакопления1ОстаткиИОбороты.Товар благодаря тому, что НоменклатураКонтрагентаТовар.Номенклатура не индексируется. |
|||
30
azernot
10.04.12
✎
17:52
|
+(20) Точнее (если нужна вся номенклатура из справочника номенклатыр контрагентов, даже не имевшая оборотов)
ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура.Номенклатура КАК Номенклатура ПОМЕСТИТЬ НоменклатураКонтрагентов ИЗ Справочник.НоменклатураКонтрагентов.Товар КАК Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НоменклатураКонтрагентов.Номенклатура, ЕСТЬNULL(РегистрНакопления1.КоличествоПриход, 0) КАК Приход, ЕСТЬNULL(РегистрНакопления1.КоличествоРасход, 0) КАК Расход, ЕСТЬNULL(РегистрНакопления1.КоличествоКонечныйОстаток, 0) КАК Остаток ИЗ НоменклатураКонтрагентов КАК НоменклатураКонтрагентов ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты( , , , , Номенклатура В (ВЫБРАТЬ НоменклатураКонтрагентов.Номенклатура ИЗ НоменклатураКонтрагентов)) КАК РегистрНакопления1 ПО НоменклатураКонтрагентов.Номенклатура = РегистрНакопления1.Номенклатура |
|||
31
News
10.04.12
✎
17:54
|
(30) а мне еще нужна будет ссылка на самого контрагента из этого справочника, по нему будет отбор в компоновке, если не будет отбора то по всей номенклатуре контрагентов
|
|||
32
azernot
10.04.12
✎
17:56
|
(31) Ну да ради бога, добавляй отбор в первом пакете запроса и в виртуальной таблице регистра накопления по контрагенту.
Суть в том, что при работе с виртуальными таблицами (типа ОстаткиИОбороты) отбюоры нужно ставить в параметрах ВТ, а не сверху. |
|||
33
Humandra
10.04.12
✎
17:57
|
(31) вооот. Говорят же - всю задачу озвучь, что надо получить, с какими отборами. В идеале еще и - по каком полям существуют или есть возможность построить индексы.
От всего этого запрос сильно зависит. В (30) все правильно пишут. Дело в том, что ОстаткиИОбороты на самом деле - отдельный запрос, по сути, а не таблица. |
|||
34
News
10.04.12
✎
18:00
|
(30) спасибо, кажется я понял как мне нужно сделать..да мне нужно по все номенклатуре даже если по ней нету оборотов..
а еще такой вопрос этот запрос будет быстрее работать чем в (0)? |
|||
35
News
10.04.12
✎
18:03
|
(33) спасибо)
|
|||
36
Humandra
10.04.12
✎
18:10
|
(30) конечно лучше чем (0), но если при этом у вас так и не будет никаких отборов, то это не спасет отца русской демократии. Вам действительно нужны данные без отбора по периоду, контрагенту итп?
|
|||
37
Humandra
10.04.12
✎
18:11
|
ИМХО, СКД - зло. Она позволяет пользователям задавать такие вот запросы, и вешать сервер.
|
|||
38
News
10.04.12
✎
18:14
|
(36) будут отборы по контрагенту и периоду
|
|||
39
azernot
10.04.12
✎
18:15
|
(34) Безусловно.
(37) Не надо грязи. Зло не СКД, а программисты. Отборы никто не отменял. их нет в (0) поэтому их нет в (30). |
|||
40
News
10.04.12
✎
18:16
|
спасибо всем
|
|||
41
acsent
10.04.12
✎
18:17
|
(37) не скд зло, а автозаполнение праметров в скд - зло
|
|||
42
Humandra
10.04.12
✎
18:18
|
(41) :) Тоже верно. Вообще, СКД хорошая штука, но уж больно она странно местами используется...
|
|||
43
azernot
10.04.12
✎
18:19
|
(41) Лопата - зло. Ею по морде бьют. :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |