|
v7: Запросец долговато выполняется | ☑ | ||
---|---|---|---|---|
0
monsterZE
09.07.13
✎
16:32
|
любопытно почему.. около 10с период день
ТекстЗапроса = " |SELECT | left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] |FROM | $Документ.РасходнаяНал as Док (NOLOCK) |INNER JOIN | _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = Док.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 |WHERE | $Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа | AND Док.IDDoc NOT IN ( | SELECT | left(right(ДокРод.ParentVal,17),9) | FROM | $Документ.Счет_фактура as ДокСчф (NOLOCK) | INNER JOIN | _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = ДокСчф.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | INNER JOIN | _1SCRDOC ДокРод (NOLOCK) ON ДокРод.ChildID = ДокСчф.IDDoc | AND ДокРод.MDID = 0 | AND ДокРод.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~) |ORDER BY Жур.Date_Time_IDDoc"; |
|||
1
monsterZE
09.07.13
✎
16:32
|
цель: найти расходники на которые не сделаны счета-фактур
|
|||
2
monsterZE
09.07.13
✎
16:36
|
основной жор (по плану запроса) при поиске в срц_док
|
|||
3
monsterZE
09.07.13
✎
16:39
|
спасибо, нашел что тормозит =)
|
|||
4
monsterZE
09.07.13
✎
16:46
|
(3) нашел, что тормозит.. не нашел как победить =)
убираю "обрезание" парент_вал и запрос выполняется намного быстрее.. |
|||
5
Ёпрст
09.07.13
✎
16:50
|
(9) не верный запрос, счет фактура может не попасть в выбранный диапазон.
|
|||
6
monsterZE
09.07.13
✎
16:52
|
(5) ну тут "с некотороми оговорками" все норм, основная проблема в скорости выполнения =)
|
|||
7
monsterZE
09.07.13
✎
16:55
|
чем заменить left right substring, чтобы было быстро?
|
|||
8
Mikeware
09.07.13
✎
16:56
|
дурной запрос какой-то
|
|||
9
monsterZE
09.07.13
✎
16:59
|
(8) предложения? =)
выбираю расходники за день, выбираю документы основания счф искомые, которых нет в табличке родителей счф |
|||
10
monsterZE
09.07.13
✎
16:59
|
думаю выгрузка отдельно табличек и сравнение в 1се будет быстрее =)
|
|||
11
Serginio1
09.07.13
✎
17:00
|
Хуже не будет если в соединении с _1SJourn прописать соединени по виду документа
_1SJourn as Жур (NOLOCK) ON (Жур.IDDocDef=$ВидДокумента.РасходнаяНал) Хуже не будет, а лучше будет если проход будет сначала по журналу |
|||
12
Salimbek
09.07.13
✎
17:02
|
(8) Так то может быть, но если тупо ускорить то:
1. Можно подзапрос вынести отдельно и укладывать во временную таблицу, потом на нем построить индекс и уже затем NOT IN (SELECT iddoc FROM #tmp_Table) 2. Можно попробовать наоборот не отрезать Лево, Право, а достроить Док.IDDoc до нужного значения, префикс будет одним и тем же. (хотя вряд ли даст значительный эффект) |
|||
13
monsterZE
09.07.13
✎
17:05
|
(12) интересно по поводу достроить =) а что там после документа у парент_вал? 8 симв
в том смысле, то там у меня пустота.. пока.. но может ли там что-то появиться? |
|||
14
Mikeware
09.07.13
✎
17:08
|
(9) ну и выбери все в одну таблицу, и фильтруй по пустой сче-фактуре
а достраивать - "O1"+iddocdef36+iddoc - будет тебе 23 |
|||
15
Serginio1
09.07.13
✎
17:13
|
Или с условием на
ДокРод.ParentVal='O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc |
|||
16
monsterZE
09.07.13
✎
17:14
|
(14) благадорюс =) с достройкой с ванчика выполняется
потом с в одной табличке попробую |
|||
17
monsterZE
09.07.13
✎
17:15
|
(15) вот так написал
| AND 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc+' ' NOT IN ( |
|||
18
Serginio1
09.07.13
✎
17:26
|
Я недавно боролся с подчиненными и понял, что такая запись
ТекстЗапроса="SELECT |Жур.IDDoc IDDoc, |Жур.IDDocDef ID10, |Жур.Closed & 1 Проведен, |Жур.ISMARK ПометкаУдаления |FROM |_1SCRDOC Отбор |INNER JOIN |_1Sjourn Жур ON Отбор.ChildID = Жур.IDDoc |Where (Отбор.ParentVal = :ВыбДок) |And (Отбор. MDID = 0)"; самая быстрая. Оптимизатор может не правильно план делать |
|||
19
monsterZE
09.07.13
✎
17:30
|
(18) спасибо, возьму на вооружение =)
|
|||
20
Serginio1
09.07.13
✎
17:35
|
А может запрос составить так, что бы не было подчиненных Документ.Счет_фактура
тоесть not exist ( SELECT * |FROM |_1SCRDOC Отбор |INNER JOIN |_1Sjourn Жур ON Отбор.ChildID = Жур.IDDoc |Where (Отбор.ParentVal='O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc) |And (Отбор. MDID = 0) |and (Жур.IDDocDef=$ВидДокумента.Счет_фактура) "; ) |
|||
21
monsterZE
09.07.13
✎
17:50
|
(20) сегодня уже не успеваю.. завтра буду его (запрос) причесывать =)
|
|||
22
monsterZE
10.07.13
✎
14:06
|
переписал вот в такую штуку =)
|SELECT | left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] | ,Отбор.ChildID as [Счф $Документ.Счет_фактура] |FROM | _1SJourn as Жур (NOLOCK) |INNER JOIN | $Документ.РасходнаяНал as Док (NOLOCK) ON Док.IDDoc = Жур.IDDoc | AND $Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа |LEFT JOIN | _1SCRDOC as Отбор ON Отбор.ParentVal = 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc | AND Отбор.MDID = 0 |WHERE | Жур.IDDocDef = $ВидДокумента.РасходнаяНал | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 //| AND Отбор.ChildID IS NULL но чет не допру как Отбор.ChildID еще по виду документа отфильтровать? =) |
|||
23
monsterZE
10.07.13
✎
14:11
|
| Жур.IDDocDef = $ВидДокумента.РасходнаяНал
это вроде получается не обязательно, бо и так джойню с расходниками.. |
|||
24
VladZ
10.07.13
✎
14:15
|
(23) Так-то оно так... Зато есть шанс попасть в индекс...
|
|||
25
monsterZE
10.07.13
✎
14:23
|
заджойнил еще раз общий журнал.. теперь выпадают пустые значения =)
|SELECT | left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] | ,Отбор.ChildID as [Счф $Документ.Счет_фактура] |FROM | _1SJourn as Жур (NOLOCK) |INNER JOIN | $Документ.РасходнаяНал as Док (NOLOCK) ON Док.IDDoc = Жур.IDDoc | AND $Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа |LEFT JOIN | _1SCRDOC as Отбор ON Отбор.ParentVal = 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc | AND Отбор.MDID = 0 |INNER JOIN | _1SJourn as ЖурТмп (NOLOCK) ON ЖурТмп.IDDoc = Отбор.ChildID | AND ЖурТмп.IDDocDef = $ВидДокумента.Счет_фактура |WHERE | Жур.IDDocDef = $ВидДокумента.РасходнаяНал | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 |
|||
26
dk
10.07.13
✎
14:32
|
аккуратнее надо с джойнами
лучше фильтр в джойне, чем после джойна |
|||
27
monsterZE
10.07.13
✎
14:34
|
вот это, то, что надо, тока как еще пустые значения вернуть? =)
|SELECT | left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] | ,Отбор.ChildID as [Счф $Документ.Счет_фактура] |FROM | _1SJourn as Жур (NOLOCK) |INNER JOIN | $Документ.РасходнаяНал as Док (NOLOCK) ON Док.IDDoc = Жур.IDDoc | AND $Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа |LEFT JOIN | _1SCRDOC as Отбор ON Отбор.ParentVal = 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc | AND Отбор.MDID = 0 |INNER JOIN | _1SJourn as ЖурТмп (NOLOCK) ON ЖурТмп.IDDoc = Отбор.ChildID | AND ЖурТмп.IDDocDef <> $ВидДокумента.Счет_фактура |WHERE | Жур.IDDocDef = $ВидДокумента.РасходнаяНал | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 |
|||
28
monsterZE
10.07.13
✎
14:35
|
(26) а как тогда? надо из срц_док выбрать все по нашим родителям, причем чилд_ид нужно пустое, либо вид_документа НЕ счет_фактура
|
|||
29
dk
10.07.13
✎
14:38
|
например
должно быстрее чем (25) отрабатывать |
|||
30
viktor_vv
10.07.13
✎
14:44
|
(29) Мне кажется в данном случае по барабану, отработает одинаково.
|
|||
31
viktor_vv
10.07.13
✎
14:44
|
(30)+ по скорости.
|
|||
32
monsterZE
10.07.13
✎
14:50
|
(30) на глаз разницу не заметно.. =)
последний иннер - коцает из таблички пустые значения, когда док.осн вобще еще нет.. вот это пока проблема №1 =) |
|||
33
Serginio1
10.07.13
✎
14:51
|
По (0) Запросу я бы сделал так
ТекстЗапроса = " |SELECT | left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] |FROM | $Документ.РасходнаяНал as Док (NOLOCK) |INNER JOIN | _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = Док.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 |WHERE | $Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа | AND Док.IDDoc NOT existst ( | SELECT * | FROM _1SCRDOC Отбор (NOLOCK) |INNER JOIN | _1SJourn as Жур (NOLOCK) Отбор.ChildID = Жур.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | Where (Отбор.ParentVal = 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc) | AND (Отбор.MDID = 0) | And (Жур.IDDocDef=$ВидДокумента.Счет_фактура) | ) |ORDER BY Жур.Date_Time_IDDoc"; По (27) сделай объединение к подзапросу либо left JOIN | _1SJourn as ЖурТмп (NOLOCK) ON ЖурТмп.IDDoc = Отбор.ChildID |
|||
34
trad
10.07.13
✎
14:56
|
я знаю как правильно написать, но придет Ёпрст и скажет что каскадные джойны @вно
:) |
|||
35
viktor_vv
10.07.13
✎
14:57
|
(27) Тут действительно "<>" ?
| _1SJourn as ЖурТмп (NOLOCK) ON ЖурТмп.IDDoc = Отбор.ChildID | AND ЖурТмп.IDDocDef <> $ВидДокумента.Счет_фактура тогда в selecte ты никак не увидишь | ,Отбор.ChildID as [Счф $Документ.Счет_фактура] как счет-фактуру. |
|||
36
viktor_vv
10.07.13
✎
15:02
|
| ,ISNULL(Отбор.ChildID,$ПустойИД) as [Счф $Документ.Счет_фактура]
|LEFT JOIN | _1SCRDOC as Отбор ON Отбор.ParentVal = 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc | AND Отбор.MDID = 0 |Left JOIN | _1SJourn as ЖурТмп (NOLOCK) ON ЖурТмп.IDDoc = Отбор.ChildID | AND ЖурТмп.IDDocDef = $ВидДокумента.Счет_фактура |Left JOIN | _1SJourn as ЖурТмп2 (NOLOCK) ON ЖурТмп2.IDDoc = Отбор.ChildID | AND ЖурТмп2.IDDocDef <> $ВидДокумента.Счет_фактура |WHERE | Жур.IDDocDef = $ВидДокумента.РасходнаяНал | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | and ЖурТмп2.IDDOC is NULL Только тормозить может :). |
|||
37
monsterZE
10.07.13
✎
15:03
|
(35) ну это в процессе разработки, чтобы видеть чего там =)
так то нужно отобрать Расходники у которых нет документов основания, либо это не счета фактуры |
|||
38
viktor_vv
10.07.13
✎
15:04
|
(37) Ну тогда надо наоборот условия связи в (36) поставить.
|
|||
39
dk
10.07.13
✎
15:05
|
проверил (29)
действительно выигрыша нет |
|||
40
viktor_vv
10.07.13
✎
15:07
|
(39) Ну таки SQL декларативный язык.
|
|||
41
trad
10.07.13
✎
15:11
|
в (34) каскадные - читать вложенные
|
|||
42
monsterZE
10.07.13
✎
15:12
|
ща поковыряюсь с вариантом от Serginio1
потом дальше буду посмотреть =) |
|||
43
Ёпрст
10.07.13
✎
15:13
|
(34) с тобой на бентли не заработаешь! ©Я
|
|||
44
Ёпрст
10.07.13
✎
15:14
|
:)
|
|||
45
monsterZE
10.07.13
✎
15:22
|
вот так фунциклирует.. =)
|SELECT | left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] |FROM | $Документ.РасходнаяНал as Док (NOLOCK) |INNER JOIN | _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = Док.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 |WHERE | $Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа | AND NOT EXISTS (SELECT * | FROM _1SCRDOC as Отбор (NOLOCK) | INNER JOIN | _1SJourn as Жур (NOLOCK) ON Отбор.ChildID = Жур.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | WHERE (Отбор.ParentVal = 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc) | AND (Отбор.MDID = 0) | AND (Жур.IDDocDef=$ВидДокумента.Счет_фактура)) |ORDER BY Жур.Date_Time_IDDoc |
|||
46
monsterZE
10.07.13
✎
15:24
|
ну это как я первый раз хотел, когда выбранного_раз нет в выбранного_два =)
|
|||
47
monsterZE
10.07.13
✎
15:24
|
но быстро =)
|
|||
48
monsterZE
10.07.13
✎
15:26
|
2 Mikeware: с одной табличкой что-то не получилось =)
|
|||
49
Serginio1
10.07.13
✎
15:30
|
(46) Можешь вместо Exist сделать левое соединение к этому подзапросу.
|
|||
50
Ёпрст
10.07.13
✎
15:35
|
(45) в inner join воткни условие на iddocdef
|
|||
51
monsterZE
10.07.13
✎
15:35
|
Спасибо Serginio1 и коллективному разуму. =)
|
|||
52
Ёпрст
10.07.13
✎
15:35
|
везде
|
|||
53
monsterZE
10.07.13
✎
15:38
|
(52) если во второй вставить - неправильно фунциклирует
|
|||
54
monsterZE
10.07.13
✎
15:41
|
гы гы гы.. но вчерашний вариант уделывает по скорости сегодняшний =))
|
|||
55
monsterZE
10.07.13
✎
15:43
|
вот этот
|SELECT | left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] |FROM | $Документ.РасходнаяНал as Док (NOLOCK) |INNER JOIN | _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = Док.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 |WHERE | $Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа | AND 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc+' ' NOT IN ( | SELECT | ДокРод.ParentVal | FROM | $Документ.Счет_фактура as ДокСчф (NOLOCK) | INNER JOIN | _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = ДокСчф.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | INNER JOIN | _1SCRDOC ДокРод (NOLOCK) ON ДокРод.ChildID = ДокСчф.IDDoc | AND ДокРод.MDID = 0 | AND ДокРод.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~) |ORDER BY Жур.Date_Time_IDDoc"; |
|||
56
Serginio1
10.07.13
✎
15:49
|
(55) Кстати а результаты одинаковые?
Разница в соединении 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc+' ' и 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc |
|||
57
monsterZE
10.07.13
✎
15:53
|
(56) ага.. одинаковые.. хотя там еще 8 знаков
|
|||
58
Serginio1
10.07.13
✎
16:01
|
(57) Сделай одникаковыми в запросах. И большая разница на неоткэшированных запросах?
|
|||
59
monsterZE
10.07.13
✎
16:02
|
(58) делал - ничего не меняет.. разница на глаза раза в два, а то и поболее
|
|||
60
monsterZE
10.07.13
✎
16:04
|
пробывал и в "сегодняшний" + ' ' добавлять
и во "вчерашнем" этот "постфикс" убирать на скорости никак не отражается.. т.е. сегодняшний все равно остается медленнее, вчерашний быстрее |
|||
61
Serginio1
10.07.13
✎
16:05
|
А если добавить в 45 условие на дату
AND (Отбор.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~) |
|||
62
monsterZE
10.07.13
✎
16:10
|
пока сегодняшний выполняется, успеваю до 5 досчитать
вчерашний на раз =) (61) непонял, это куда |
|||
63
Ёпрст
10.07.13
✎
16:11
|
(53) не используй одинаковые алиясы в тексте запроса.
|
|||
64
monsterZE
10.07.13
✎
16:12
|
к (62) если во вложенное WHERE - не удалось привязать составной идентификатор
|
|||
65
monsterZE
10.07.13
✎
16:12
|
(64) это не я =))))))
|
|||
66
Serginio1
10.07.13
✎
16:14
|
WHERE (Отбор.ParentVal = 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc)
|AND (Отбор.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~) | AND (Отбор.MDID = 0) | AND (Жур.IDDocDef=$ВидДокумента.Счет_фактура) |
|||
67
monsterZE
10.07.13
✎
16:18
|
(63) кстати, алиасы сменил - все равно не правильно
(66) понял, выйгрыша не дало.. или очень не значительный |
|||
68
Ёпрст
10.07.13
✎
16:19
|
(67) покажи неправильный запрос
|
|||
69
monsterZE
10.07.13
✎
16:22
|
|SELECT
| left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] |FROM | $Документ.РасходнаяНал as Док (NOLOCK) |INNER JOIN | _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = Док.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 //| AND Жур.IDDocDef = $ВидДокумента.РасходнаяНал |WHERE | $Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа | AND NOT EXISTS (SELECT * | FROM _1SCRDOC as Отбор (NOLOCK) | INNER JOIN | _1SJourn as Жур2 (NOLOCK) ON Жур2.IDDoc = Отбор.ChildID | AND Жур2.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур2.Closed & 1 = 1 //| AND Жур2.IDDocDef = $ВидДокумента.РасходнаяНал | WHERE (Отбор.ParentVal = 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc) | AND (Отбор.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~) | AND (Отбор.MDID = 0) | AND (Жур2.IDDocDef=$ВидДокумента.Счет_фактура)) | |ORDER BY Жур.Date_Time_IDDoc |
|||
70
Serginio1
10.07.13
✎
16:24
|
SELECT
| left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] |FROM | $Документ.РасходнаяНал as Док (NOLOCK) |INNER JOIN | _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = Док.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | Left Join (SELECT Отбор.ParentVal | FROM _1SCRDOC as Отбор (NOLOCK) | INNER JOIN | _1SJourn as Жур (NOLOCK) ON Отбор.ChildID = Жур.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | WHERE (Отбор.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~) | AND (Отбор.MDID = 0) | AND (Жур.IDDocDef=$ВидДокумента.Счет_фактура)) as Подзапрос | on 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc+' '=Подзапрос.ParentVal |WHERE | ($Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа) | and (Жур.IDDocDef = $ВидДокумента.РасходнаяНал) | and (Подзапрос.ParentVal is null) |ORDER BY Жур.Date_Time_IDDoc |
|||
71
monsterZE
10.07.13
✎
16:26
|
(70) так вроде еще чутка подольше..
|
|||
72
Serginio1
10.07.13
✎
16:27
|
Или что бы алиасы не совпадали
SELECT | left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] |FROM | $Документ.РасходнаяНал as Док (NOLOCK) |INNER JOIN | _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = Док.IDDoc | AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | Left Join (SELECT Отбор.ParentVal | FROM _1SCRDOC as Отбор (NOLOCK) | INNER JOIN | _1SJourn as Жур1 (NOLOCK) ON Отбор.ChildID = Жур1.IDDoc | AND Жур1.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур1.Closed & 1 = 1 | WHERE (Отбор.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~) | AND (Отбор.MDID = 0) | AND (Жур1.IDDocDef=$ВидДокумента.Счет_фактура)) as Подзапрос | on 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc+' '=Подзапрос.ParentVal |WHERE | ($Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа) | and (Жур.IDDocDef = $ВидДокумента.РасходнаяНал) | and (Подзапрос.ParentVal is null) |ORDER BY Жур.Date_Time_IDDoc |
|||
73
Serginio1
10.07.13
✎
16:29
|
Надо сравнивать планы запросов.
|
|||
74
monsterZE
10.07.13
✎
16:31
|
(72) пока лидирует "дурной запрос" =)
я хз как теперь план на него отловить - раньще он в последних ресурсоемких отражался, сейчас (после достройки) его там нет. |
|||
75
monsterZE
10.07.13
✎
16:37
|
план медленного сохранил.. могу положить на филес.майл.ру например
|
|||
76
Serginio1
10.07.13
✎
16:45
|
(74) Почему дурной? Первый был дурным, а этот уже причесанный. Все зависит от плана запроса. Нужно смотреть различие
|
|||
77
monsterZE
10.07.13
✎
16:53
|
(76) ну Mikeware так его окрестил =)
А как выцепить план на конкретный запрос, который не ресурсоемкий? |
|||
78
Serginio1
10.07.13
✎
16:57
|
||||
79
Serginio1
10.07.13
✎
16:59
|
В том же SMS можно план посмотреть
|
|||
80
Serginio1
10.07.13
✎
17:01
|
||||
81
monsterZE
10.07.13
✎
17:02
|
запустил в профайлере трассировку, нашел этот запрос, а как план теперь из него посмотреть? =)
|
|||
82
Serginio1
10.07.13
✎
17:02
|
(77) Поставь рс.отладка(1) вставь в SMS и смотри план запроса
|
|||
83
Serginio1
10.07.13
✎
17:03
|
||||
84
monsterZE
10.07.13
✎
17:21
|
из профайлера план так и не нашел как посмотреть.. поставил период побольше и из студии открыл план.
|
|||
85
monsterZE
10.07.13
✎
17:23
|
в быстром плане есть слово параллелизм =)
|
|||
86
Ёпрст
10.07.13
✎
17:27
|
дык во втором запросе надо же не расх накладную, а условие на сч. фактуру
|
|||
87
monsterZE
10.07.13
✎
17:30
|
(86) поменял.. в скорости выйгрыша не дает.. или почти не заметно
|
|||
88
Ёпрст
10.07.13
✎
17:31
|
(87) поставь условие на вид дока первым
|
|||
89
Serginio1
10.07.13
✎
17:31
|
(86) У него условие на подчиненные счет фактуры
с нормальными алиасами (Жур1.IDDocDef=$ВидДокумента.Счет_фактура |
|||
90
Ёпрст
10.07.13
✎
17:32
|
(89) я про "неправильный" запрос грю.. где виддока закомменчен
|
|||
91
monsterZE
10.07.13
✎
17:34
|
(90) поставил первыми - если что-то изменилось, то незначительно
|
|||
92
monsterZE
10.07.13
✎
17:37
|
ссылка на планы
http://files.mail.ru/5DB43419134F4ACEA25F8B37E052B8D3 |
|||
93
Serginio1
10.07.13
✎
17:38
|
Можно попробовать
SELECT | left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата] | ,Док.IDDoc as [Документ $Документ.РасходнаяНал] | ,$Док.Сумма as Сумма | ,$Док.Клиент as [Клиент $Справочник.Клиенты] |FROM | $Документ.РасходнаяНал as Док (NOLOCK) |INNER JOIN | _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = Док.IDDoc | Left Join (SELECT Отбор.ParentVal | FROM _1SCRDOC as Отбор (NOLOCK) | INNER JOIN | _1SJourn as Жур1 (NOLOCK) ON Отбор.ChildID = Жур1.IDDoc | | WHERE (Отбор.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~) | AND (Отбор.MDID = 0) | AND (Жур1.IDDocDef=$ВидДокумента.Счет_фактура) | AND (Жур1.Closed & 1 = 1)) as Подзапрос | on 'O1'+$ВидДокумента36.РасходнаяНал+Док.IDDoc+' '=Подзапрос.ParentVal |WHERE (Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~) | AND (Жур.Closed & 1 = 1) | and (Жур.IDDocDef = $ВидДокумента.РасходнаяНал) | And ($Док.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа) | and (Подзапрос.ParentVal is null) |ORDER BY Жур.Date_Time_IDDoc |
|||
94
monsterZE
10.07.13
✎
17:41
|
(93) этот выполняется моментально =)
|
|||
95
monsterZE
10.07.13
✎
17:44
|
может на долю секунды быстрее, чем "вчерашний", но заметно =)
|
|||
96
monsterZE
10.07.13
✎
17:45
|
а может и не заметно, бо я через выбратьстроку() его смотрю
а вчерашний через печатную форму =) но разница с предъидущим вариантом очевидна |
|||
97
Serginio1
10.07.13
✎
17:48
|
(95) Ну в нем убрано все лишнее. И тебе будет удобнее когда нужно бедет пришпондрить твой вариант с 25.
|
|||
98
monsterZE
10.07.13
✎
17:52
|
(97) вобщем доп условия внутри джойнов отжирают значительное время =) спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |