v7: Запросец долговато выполняется #672275


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

В этой группе 1С