|
v7: Прямой запрос и ТП | ☑ | ||
---|---|---|---|---|
0
monsterZE
10.01.14
✎
16:51
|
есть вот такой запрос (из дебагера)
select top 20 Т.ПрихДок as Док, 0 as Маркер, (Т.Проведен - Т.Удален) as Статус, left(Т.ДатаДок, 8) as ДатаДок, dbo.formatTime(SUBSTRING(Т.ДатаДок,9,6),':') as ВремяДок, Т.ПризнакНакладной as ПризнакНакладной, Т.НомерДок as НомерДок, Т.Клиент as Клиент, Т.Основание as Основание, Т.Закреплен as Закреплен from ( SELECT DISTINCT ДокП.IDDoc as ПрихДок ,ДокП.sp217 as Клиент ,ДокП.sp226 as ПризнакНакладной ,Жур.Date_Time_IDDoc as ДатаДок ,Жур.Closed & 1 as Проведен ,Жур.ISMARK as Удален ,Жур.DocNo as НомерДок ,0 as Основание ,ДокП.sp1447 as Закреплен FROM dh214 as ДокП (NOLOCK) INNER JOIN _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = ДокП.IDDoc AND (Жур.Date_Time_IDDoc BETWEEN '20140110' AND '20140110Z') INNER JOIN dt214 as ДокПСтр (NOLOCK) ON ДокПСтр.IDDoc = ДокП.IDDoc INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN (' 5 ') WHERE ДокП.sp216 = ' 2 ' ) as Т order by Т.ПрихДок |
|||
43
viktor_vv
11.01.14
✎
14:22
|
(42) да не должно оно тупить, там же дергаться будет только то, что на экран влезло.
Это если тупняк действительно из-за строки с неограниченной длиной. |
|||
44
viktor_vv
11.01.14
✎
14:23
|
(43) + имхо.
|
|||
45
monsterZE
11.01.14
✎
14:35
|
(43) Если будут еще затупы - перенесу в при_выводе_строки
пока очень помогло в старый запрос добавить условие по типу документа |
|||
46
viktor_vv
11.01.14
✎
14:56
|
(45) Я тоже сомневаюсь что из-за строки.
Плюс запросы с журналом обычно делаю таблицу журнала основной с условиями в where и левым уже к ней леплю, как-то с inner периодически на грабли наступал. Оно конечно от перемены мест план не должен поменяться, но когда несколько соединений могу быть нюансы. |
|||
47
trad
11.01.14
✎
19:13
|
(30) добавь в селект позицию документа Жур.Date_Time_IDDoc
и в ключе порядка укажи позицию |
|||
48
monsterZE
13.01.14
✎
12:56
|
(47) хм - плюсов не дало..
поменял AND EXISTS на AND ДокП.IDDoc IN примерно сравнялось по скорости с дестинкт-вариантом.. |
|||
49
ADirks
13.01.14
✎
13:53
|
я бы как-то так нарисовал
select top 20 ДокП.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, dbo.ВремяСтрокой(Жур.Date_Time_IDDoc) Время, ДокП.Фирма as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.Контрагент as Клиент, CAST(ДокП.Комментарий as VarChar(100)) as Основание, ДокП.Договор as Закреплен from ЖурналДокументов Жур LEFT JOIN докЗаявка as ДокП ON ДокП.идДок9 = Жур.идДок9 where Жур.IDDocDef = 15124 AND (Жур.Date_Time_IDDoc BETWEEN '20130901' AND '20140111Z') AND ДокП.Фирма = ' 2 ' AND EXISTS ( SELECT ДокПСтр.IDDoc FROM докТЧЗаявка as ДокПСтр INNER JOIN спрНоменклатура as СпрТов ON СпрТов.ид13 = ДокПСтр.Товар AND СпрТов.ТипКонструкции IN (' V7O ') WHERE ДокПСтр.IDDoc = Жур.IDDoc ) and Жур.Date_Time_IDDoc > '20130912' order by Жур.Date_Time_IDDoc ----------------------------------------- Заметь, вместо ДокП.IDDoc везде надо использовать Жур.IDDoc и ключ порядка обязательно по Жур.Date_Time_IDDoc - это кардинально меняет план запроса. |
|||
50
ADirks
13.01.14
✎
13:57
|
И ещё, может быть в данном случае стоит задуматься о некоей избыточности данных, в целях ускорения.
Т.е. завести например справочник с полями Документ, СкладТ. Заполнять этот справочник при записи документа. А ещё лучше SQL-табличку с такими же колонками, но с кластерным индексом (СкладТ, Документ) |
|||
51
monsterZE
13.01.14
✎
14:40
|
пасиб! попробую и этот вариант.
я делал для расходников отдельный справочник из него отбирает моментально (но там немного больший функционал) если приспичит со скоростью и здесь - буду думать над (50) |
|||
52
trad
13.01.14
✎
14:52
|
(48)далее мне сложно что-либо советовать. Нужно изучать планы выполнения.
|
|||
53
Принт
13.01.14
✎
14:52
|
(0) ТП, простите, что?
|
|||
54
trad
13.01.14
✎
14:59
|
(53) см (2), (4)
|
|||
55
trad
13.01.14
✎
15:00
|
(53) ТП - табличное поле в семерке
|
|||
56
monsterZE
13.01.14
✎
15:19
|
Всем спасибо за участие =) третий вариант работает примено также как второй с екзистс - вот так получается быстрее, но вобщем на уровне с дистинки и вторым запросом
select top 20 Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, dbo.formatTime(SUBSTRING(Жур.Date_Time_IDDoc,9,6),'':'') as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc AND (ДокП.sp216 = '' 2 '') where Жур.IDDocDef = 214 AND (Жур.Date_Time_IDDoc BETWEEN ''20131201'' AND ''20131213Z'') AND Жур.IDDoc IN ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) order by Жур.Date_Time_IDDoc |
|||
57
Ёпрст
13.01.14
✎
15:23
|
забавное условие на iddoc
|
|||
58
Ёпрст
13.01.14
✎
15:24
|
+ в подзапросе условие на него же еще и коррелированное
|
|||
59
monsterZE
13.01.14
✎
15:26
|
гы.. поставил в этот вариант два месяца - все также быстро
поставил два месяца в запрос с дистинкт и 1с умерла =) |
|||
60
monsterZE
13.01.14
✎
15:27
|
(57)что за условие? чет не вижу =)
|
|||
61
Ёпрст
13.01.14
✎
15:36
|
(60)
AND Жур.IDDoc IN (select iddoc ... where IDDoc = Жур.IDDoc) |
|||
62
monsterZE
13.01.14
✎
15:42
|
(61) хм, ну да.. =)
меняю его на екзистс и с двух месячным периодом получаю так-же вылет 1сы |
|||
63
Ёпрст
13.01.14
✎
15:44
|
а так ?
AND exists (select * from ... where IDDoc = Жур.IDDoc) |
|||
64
monsterZE
13.01.14
✎
15:53
|
(63) в смысле так - ? вылет
| AND exists ( | select * | from | $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK) | INNER JOIN | $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар | AND $СпрТов.СкладТ IN (:СписСкладов) | where | IDDoc = Жур.IDDoc) |
|||
65
Ёпрст
13.01.14
✎
15:56
|
так:
| AND exists ( | select * | from | $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK) | INNER JOIN | $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар | AND $СпрТов.СкладТ IN (:СписСкладов) | where | ДокПСтр.IDDoc = Жур.IDDoc) |
|||
66
monsterZE
13.01.14
✎
16:02
|
вобщем вот подзапрос
ПодзапросОтбораПоСкладам = " | AND EXISTS //| AND Жур.IDDoc IN | ( | SELECT | ДокПСтр.IDDoc | FROM | $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK) | INNER JOIN | $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар | AND $СпрТов.СкладТ IN (:СписСкладов) | WHERE | ДокПСтр.IDDoc = Жур.IDDoc | ) |"; |
|||
67
monsterZE
13.01.14
✎
16:03
|
смотрю с дебаг(1)
с ексзистс: если пролетает аск деск - то работает но медленно если аск деск не видно - как будто на одном месте крутится |
|||
68
Ёпрст
13.01.14
✎
16:04
|
(67) а как в (65) что ?
|
|||
69
monsterZE
13.01.14
✎
16:08
|
(65) циклится и вылетает
|
|||
70
Ёпрст
13.01.14
✎
16:21
|
не верится, что (66) работает, а (65) нет.
|
|||
71
monsterZE
13.01.14
✎
16:22
|
(70) нет - (66) тоже не работает =)
если относительно большой период ставишь - тоже самое |
|||
72
monsterZE
13.01.14
✎
16:23
|
если условие с IN - пролетают два запроса и ТП обновляется
если условие с EXISTS - лезет бесконечный цикл из запросов и 1с валится |
|||
73
Ёпрст
13.01.14
✎
16:26
|
а че за реквизит СкладТ ? Накой он в товарах.. ?
|
|||
74
monsterZE
13.01.14
✎
16:29
|
(73) это физический склад товара
|
|||
75
Ёпрст
13.01.14
✎
16:32
|
(74) это как ?
:) |
|||
76
monsterZE
13.01.14
✎
16:34
|
(75) вот так =) оптовая база
5 сторон по несколько складов на каждой А1, А2, Б3, Г1,... |
|||
77
Ёпрст
13.01.14
✎
16:37
|
Дык чего за товар такой, что он всегда на одном складе ?
|
|||
78
Ёпрст
13.01.14
✎
16:37
|
конкретном ?
|
|||
79
monsterZE
13.01.14
✎
16:39
|
позиции товары закреплены за определенными складами (конкретными) электрика, сантехника, стройка, посуда, пластмасса, швейка, ...
|
|||
80
trad
13.01.14
✎
17:15
|
(72)
1.покажи отладочный запрос с exists 2.не могу вкурить запрос (56) из-за лишней скобки в конце |
|||
81
ADirks
13.01.14
✎
17:31
|
А кстати, настройка 'max degree of parallelism' какое значение имеет? А то бывает, что распараллеливание даёт такие эффекты :)
exec sp_configure 'show advanced options', 1 RECONFIGURE WITH OVERRIDE exec sp_configure 'max degree of parallelism' |
|||
82
Ёпрст
13.01.14
✎
17:32
|
(81) дык, наверняка 1..
|
|||
83
ADirks
13.01.14
✎
17:33
|
(82) почему наверняка? по умолчанию то 0.
|
|||
84
Ёпрст
13.01.14
✎
17:38
|
(83) та обычно все первым делом паралелизм отключають ;)
|
|||
85
Ёпрст
13.01.14
✎
17:39
|
мне вот непонятно, чего с экзистом не работает, а с ин работает..
|
|||
86
ADirks
13.01.14
✎
17:41
|
(84) не все такие хитрые :)
(85) это да, я пробовал и так и так - результат вообще идентичный |
|||
87
monsterZE
13.01.14
✎
17:43
|
нормальный запрос из 56
ТекстЗапроса = " |SELECT | left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Жур.DocNo as НомерДок | ,Жур.Date_Time_IDDoc as ПозДок | ,(Жур.Closed & 1 - Жур.ISMARK) as Статус | ,dbo.formatTime(SUBSTRING(Жур.Date_Time_IDDoc,9,6),':') as ВремяДок | ,Жур.IDDoc as [Док $Документ.ПриходнаяНал] | ,$ДокП.ПризнакНакладной as [ПризнакНакладной $Перечисление.ПризнПрихНакл] | ,$ДокП.Клиент as [Клиент $Справочник.Клиенты] | ,CAST(ДокП.$ОбщийРеквизит.Основание as VarChar(100)) as Основание | ,$ДокП.ЗакрепленЗа as [Закреплен $Справочник.ЗакрепДокЗа] | ,0 as Маркер |FROM | _1SJourn as Жур (NOLOCK) |LEFT JOIN | $Документ.ПриходнаяНал as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc | AND ($ДокП.Склад = :ОснСклад) |"; // указан клиент Если ВыбКлиент.Выбран()=1 Тогда ТекстЗапроса = ТекстЗапроса + " AND ($ДокП.Клиент = :ВыбКлиент)"; Источник.УстановитьТекстовыйПараметр("ВыбКлиент", ВыбКлиент); КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |WHERE | Жур.IDDocDef = $ВидДокумента.ПриходнаяНал //| AND Жур.Closed & 1 = 1 |"; Источник.УстановитьТекстовыйПараметр("ОснСклад", Константа.ОснСклад); // указан период Если (НачДата<>"") и (КонДата<>"") Тогда ТекстЗапроса = ТекстЗапроса + " AND (Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~)"; Источник.УстановитьТекстовыйПараметр("НачДата", НачДата); Источник.УстановитьТекстовыйПараметр("КонДата", КонДата); КонецЕсли; ПодзапросОтбораПоСкладам = " //| AND EXISTS | AND Жур.IDDoc IN | ( | SELECT | ДокПСтр.IDDoc | FROM | $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK) | INNER JOIN | $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар | AND $СпрТов.СкладТ IN (:СписСкладов) | WHERE | ДокПСтр.IDDoc = Жур.IDDoc | ) |"; // указан склад //Если РазмерСпискаСклад>0 Тогда // ТекстЗапроса = ТекстЗапроса + "AND $СпрТов.СкладТ IN (:СписСкладов)"; // Запрос.УстановитьТекстовыйПараметр("СписСкладов", СписВыбСкладСтр); //КонецЕсли; // указан склад РазмерСпискаСклад = СписВыбСклад.РазмерСписка(); Если СписВыбСклад.РазмерСписка()>0 Тогда ТекстЗапроса = ТекстЗапроса + ПодзапросОтбораПоСкладам; СписВыбСкладСтр = ""; Для ъ=1 По РазмерСпискаСклад Цикл СписВыбСкладСтр = СписВыбСкладСтр+МД.ЗначениеВСтрокуБД(СписВыбСклад.ПолучитьЗначение(ъ))+?(ъ<РазмерСпискаСклад,"','",""); КонецЦикла; Источник.УстановитьТекстовыйПараметр("СписСкладов", СписВыбСкладСтр); КонецЕсли; Источник.УстТекстЗапроса(ТекстЗапроса); Источник.УстИДПоле("Док"); //Источник.УстКлючПорядка("Док"); Источник.УстКлючПорядка("ПозДок"); |
|||
88
monsterZE
13.01.14
✎
17:43
|
параллелилизм = 0
|
|||
89
ADirks
13.01.14
✎
17:44
|
(88) попробуй в 1 выставить
exec sp_configure 'show advanced options', 1 RECONFIGURE WITH OVERRIDE sp_configure 'max degree of parallelism', 1 RECONFIGURE WITH OVERRIDE exec sp_configure 'max degree of parallelism' |
|||
90
monsterZE
13.01.14
✎
17:57
|
(89) ок, но уже завтра
я в студии мышковозюканьем выставляю =) |
|||
91
monsterZE
14.01.14
✎
10:10
|
итак, параллелилизм тут не при чем. =)
|
|||
92
monsterZE
14.01.14
✎
10:12
|
можно видео на тф записать.. мож по нему чего понятнее будет?
|
|||
93
trad
14.01.14
✎
10:19
|
Покажи все таки отладочный запрос с exists.
Интересно почему из-за него циклится. Точнее понятно, что циклится из-за неуникальности КП, но почему возникает эта неуникальность непонятно. |
|||
94
monsterZE
14.01.14
✎
10:21
|
(93) я могу тока его, если на тф записать =)
ибо он циклится и 1с падает. в тяжелых запросах в студии его нет |
|||
95
trad
14.01.14
✎
10:55
|
а не в тяжелых? фильтры же другие есть
|
|||
96
monsterZE
14.01.14
✎
11:10
|
(95) чет ковырял трассировки в профайлере - не ловит ничего =(
|
|||
97
monsterZE
14.01.14
✎
11:13
|
..нашел себя по пиду =) не туда номер подставлял
|
|||
98
monsterZE
14.01.14
✎
11:14
|
от периода похоже не зависит..
сразу ставлю два месяца - норм три месяца - норм пару дней - каюк =) |
|||
99
monsterZE
14.01.14
✎
11:16
|
последние запросы из профайлера от не последних ничем не отличаются
select top 20 Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, dbo.formatTime(SUBSTRING(Жур.Date_Time_IDDoc,9,6),':') as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc AND (ДокП.sp216 = ' 2 ') where Жур.IDDocDef = 214 AND (Жур.Date_Time_IDDoc BETWEEN '20131201' AND '20140114Z') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN (' 5 ') WHERE ДокПСтр.IDDoc = Жур.IDDoc ) order by Жур.Date_Time_IDDoc desc |
|||
100
monsterZE
14.01.14
✎
11:20
|
на маленьких периодах не заметно.. можно долго перебирать
а на больших - как будто буфер какой-то переполняется =\ |
|||
101
monsterZE
14.01.14
✎
11:44
|
в профайлере не все смотрю - пакеты не включил
ща еще раз |
|||
102
monsterZE
14.01.14
✎
12:21
|
вобщем вот это последние повторяющиеся запросы:
exec sp_executesql N' select Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, 0 as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc AND (ДокП.sp216 = '' 2 '') where (Жур.Date_Time_IDDoc = @OKParam_0) and (Жур.IDDocDef = 214 AND (Жур.Date_Time_IDDoc BETWEEN ''20131001'' AND ''20140114Z'') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) ',N'@OKParam_0 char(23)','2013122679VQ5C Y3DY ' ---- exec sp_executesql N' select top 20 Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, 0 as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc AND (ДокП.sp216 = '' 2 '') where (Жур.Date_Time_IDDoc > @OKParam_0) and (Жур.IDDocDef = 214 AND (Жур.Date_Time_IDDoc BETWEEN ''20131001'' AND ''20140114Z'') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) order by Жур.Date_Time_IDDoc ',N'@OKParam_0 char(23)','2013122679VQ5C Y3DY ' |
|||
103
trad
14.01.14
✎
12:51
|
LEFT JOIN dh214 замени на INNER JOIN dh214
либо условие AND (ДокП.sp216 = '' 2 '') перенеси в where |
|||
104
trad
14.01.14
✎
12:52
|
иначе Жур.IDDoc as Док, может быт null
|
|||
105
monsterZE
14.01.14
✎
13:01
|
(104) - ага, уже сделал.
а то лезли доки с не основного склада |
|||
106
Ёпрст
14.01.14
✎
14:46
|
откуда там )) в конце ?
|
|||
107
monsterZE
14.01.14
✎
15:13
|
(106) - хороший вопрос
|
|||
108
monsterZE
14.01.14
✎
15:17
|
вот тут она должна быть
where (Жур.IDDocDef = 214 AND (Жур.Date_Time_IDDoc BETWEEN ''20140114'' AND ''20140114Z'') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) and (Жур.IDDoc = @IDFieldParam) order by Жур.Date_Time_IDDoc |
|||
109
monsterZE
14.01.14
✎
15:23
|
чета как-то странно оно условия выстраивает
|
|||
110
monsterZE
14.01.14
✎
15:30
|
оно собирает все мои условия в скобки.. видимо иногда что-то идет не так =)
|
|||
111
monsterZE
14.01.14
✎
15:35
|
да нет.. может глюк какой, сейчас немного условия переделал - с екзист все равно валится
exec sp_executesql N' select top 20 Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, 0 as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc where (Жур.Date_Time_IDDoc > @OKParam_0) and ((Жур.IDDocDef = 214) AND (ДокП.sp216 = '' 2 '') AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) order by Жур.Date_Time_IDDoc ',N'@OKParam_0 char(23)','201312269Q1DOW Y438 ' |
|||
112
monsterZE
14.01.14
✎
15:36
|
в 102 все правильно
вот открывающая скобка where (Жур.Date_Time_IDDoc = @OKParam_0) and (Жур.IDDocDef = 214 |
|||
113
trad
14.01.14
✎
15:45
|
(106)
(Жур.IDDocDef = 214 ... AND EXISTS ( ... )) |
|||
114
monsterZE
14.01.14
✎
15:56
|
в профайлере
exec sp_executesql N' select top 1 Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, 0 as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc where ((Жур.IDDocDef = 214) AND (ДокП.sp216 = '' 2 '') AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) and (Жур.IDDoc = @IDFieldParam) order by Жур.Date_Time_IDDoc ',N'@IDFieldParam char(9)',' YJBL ' - exec sp_executesql N' select top 20 Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, 0 as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc where (Жур.Date_Time_IDDoc > @OKParam_0) and ((Жур.IDDocDef = 214) AND (ДокП.sp216 = '' 2 '') AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) order by Жур.Date_Time_IDDoc ',N'@OKParam_0 char(23)','201401147ZKD6O YJBL ' - exec sp_executesql N' select top 20 Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, 0 as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc where (Жур.Date_Time_IDDoc < @OKParam_0) and ((Жур.IDDocDef = 214) AND (ДокП.sp216 = '' 2 '') AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) order by Жур.Date_Time_IDDoc desc ',N'@OKParam_0 char(23)','201401148IFT28 YJHG ' - exec sp_executesql N' select Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, 0 as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc where (Жур.Date_Time_IDDoc = @OKParam_0) and ((Жур.IDDocDef = 214) AND (ДокП.sp216 = '' 2 '') AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) ',N'@OKParam_0 char(23)','201312269Q1DOW Y438 ' - exec sp_executesql N' select top 20 Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, 0 as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc where (Жур.Date_Time_IDDoc > @OKParam_0) and ((Жур.IDDocDef = 214) AND (ДокП.sp216 = '' 2 '') AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) order by Жур.Date_Time_IDDoc ',N'@OKParam_0 char(23)','201312269Q1DOW Y438 ' - exec sp_executesql N' select Жур.Date_Time_IDDoc as ПозДок, Жур.IDDoc as Док, 0 as Маркер, (Жур.Closed & 1 - Жур.ISMARK) as Статус, left(Жур.Date_Time_IDDoc, 8) as ДатаДок, 0 as ВремяДок, ДокП.sp226 as ПризнакНакладной, Жур.DocNo as НомерДок, ДокП.sp217 as Клиент, CAST(ДокП.sp1008 as VarChar(100)) as Основание, ДокП.sp1447 as Закреплен from _1SJourn as Жур (NOLOCK) LEFT JOIN dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc where (Жур.Date_Time_IDDoc = @OKParam_0) and ((Жур.IDDocDef = 214) AND (ДокП.sp216 = '' 2 '') AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'') AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc )) ',N'@OKParam_0 char(23)','201312269Q1DOW Y438 ' и погнал |
|||
115
trad
14.01.14
✎
16:11
|
заколдованное какое-то ТП
проверь это select date_time_iddoc, count(*) from _1sjourn (nolock) group by date_time_iddoc having count(*) > 1 select iddoc, count(*) from dh214 (nolock) group by iddoc having count(*) > 1 чем черт не шутит |
|||
116
trad
14.01.14
✎
16:12
|
и еще, версия 1c++ не сильно древняя?
|
|||
117
monsterZE
14.01.14
✎
16:15
|
кста, это проявляется только, если запрос используется в ТП
т.е., если отдельно запускать - с екзист работает беспроблем |
|||
118
monsterZE
14.01.14
✎
16:16
|
(116) 3.2.3.1
|
|||
119
Ёпрст
14.01.14
✎
16:16
|
(118) вот на этой пробуй
http://www.1cpp.ru/forumfiles/Attachments/icpp-3-2-4-1.rar |
|||
120
Ёпрст
14.01.14
✎
16:17
|
там ТП точно правили
|
|||
121
monsterZE
14.01.14
✎
16:24
|
(119) ок, попробую эту версию.. но ток в конце раб-дня
|
|||
122
monsterZE
15.01.14
✎
10:09
|
проверил на новой версии - все ок!
и работает быстрее.. заметно на глаз =) |
|||
123
monsterZE
15.01.14
✎
10:10
|
сегодня обновлю на рабочей базе, посмотрю как будут себя вести остальные отчеты
|
|||
124
monsterZE
15.01.14
✎
10:13
|
мля, поторопился - без отбора по складу проверял %-)
|
|||
125
trad
15.01.14
✎
10:17
|
(124) т.е. проблема проявляется при наличии условия AND (ДокП.sp216 = '' 2 '') ?
|
|||
126
monsterZE
15.01.14
✎
10:25
|
(125) не не не
sp216 - это просто основной склад товара с которого ведется торговля проявляется, когда к основному запросу добавляется подзапрос причем с использованием екзистс |
|||
127
monsterZE
15.01.14
✎
10:25
|
проверил с новой версией - тоже самое
|
|||
128
monsterZE
15.01.14
✎
10:26
|
когда добавляется вот этот кусочек
AND EXISTS ( SELECT ДокПСтр.IDDoc FROM dt214 as ДокПСтр (NOLOCK) INNER JOIN sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('' 5 '') WHERE ДокПСтр.IDDoc = Жур.IDDoc ) |
|||
129
monsterZE
15.01.14
✎
10:31
|
(125) схема такая - торгуют с одного склада, на котором лежат остатки в 1с
но физически товар лежит на разных удаленных складах документы выписываются без деления по складам, а складских работников интересует именно ихний товар |
|||
130
trad
15.01.14
✎
11:10
|
повторил в точности твой запрос, поменяв идентификаторы метаданных на свои - все отлично крутится.
можешь проверить http://rghost.ru/51663691 |
|||
131
monsterZE
15.01.14
✎
12:02
|
(130) я ща заюзаю по твоему примеру, но! ты пропустил - у меня тоже запрос выполняется. н-ное количество раз и при очередном обновлении - циклится. т.е. 3 запроса проходят нормально, на 4м завал.
|
|||
132
monsterZE
15.01.14
✎
13:03
|
..ну что, после часовых поползновений:
екзистс - работает существенно медленние это как-то связано со столбиком картинок (иконки статуса) |
|||
133
monsterZE
15.01.14
✎
13:14
|
вот мое ПриВыводеСтроки:
Процедура ТППриВыводеСтроки(ТП, ОформлениеСтроки, ДанныеСтроки, ТипРегиона) Если ТипРегиона = 3 Тогда ОбъектЯчейка = ОформлениеСтроки.Ячейки.Получить("Статус"); ТекДанные = ДанныеСтроки.Получить("Статус"); Если ТекДанные = -1 Тогда ТекДанные = 2; КонецЕсли; ОбъектЯчейка.ОтображатьТекст = 0 ; ОбъектЯчейка.ОтображатьКартинку = 1 ; ОбъектЯчейка.ИндексКартинки = ТекДанные; КонецЕсли; КонецПроцедуры |
|||
134
monsterZE
15.01.14
✎
13:31
|
валится, даже если вот так только оставляю:
Если ТипРегиона = 3 Тогда ОбъектЯчейка = ОформлениеСтроки.Ячейки.Получить("Статус"); КонецЕсли; |
|||
135
monsterZE
15.01.14
✎
13:33
|
даже если просто проверку на тип региона оставить.. пустую
|
|||
136
monsterZE
15.01.14
✎
21:58
|
trad, попробуй из интереса добавить
и погонять на больших периодах 1-2-3 мес Процедура ТППриВыводеСтроки(ТП, ОформлениеСтроки, ДанныеСтроки, ТипРегиона) а=1; КонецПроцедуры |
|||
137
trad
16.01.14
✎
09:00
|
попробовал - все ОК
|
|||
138
trad
16.01.14
✎
09:02
|
для некоторого ускорения можно еще такую конструкцию добавить
... as СпрТов (NOLOCK index=idd) ON ... и обязательно отключить параллелелизм |
|||
139
monsterZE
18.01.14
✎
10:21
|
(138) ап, для размышления =)
добавляю index=idd и начинает также падать с Жур.IDDoc IN |
|||
140
monsterZE
18.01.14
✎
10:26
|
мож у меня чего не так с индексами?
каждую ночь делается: -проверка целостности -реорганизация индекса -обновление статистики средствами скл. |
|||
141
monsterZE
18.01.14
✎
10:32
|
к (139) но как-то реже что-ли падает.. как-то нет четкой взаимосвязи =(
|
|||
142
monsterZE
18.01.14
✎
10:48
|
я хз короче.. =) екзистс с индекс идд
падает реже. работает быстрее. обновил 1с++ отключил параллелизм заметил что как-то кэширование что-ли "заработало" =) делаешь одинаковые запросы - повторные выполняются почти моментально. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |