Имя: Пароль:
1C
1C 7.7
v7: как оптимизировать прямой запрос
0 dreamoff
 
19.09.14
13:47
|SELECT  DISTINCT
        |      Подзапрос.Документ                 [Документ $Документ]
        |    , Подзапрос.Документ_вид    
        |    , Подзапрос.ЦентрЗатрат     [ЦентрЗатрат $Справочник.ЦентрЗатрат]
        |FROM  (
        |        SELECT Счет.IDDOC Документ
        |            , Журнал.IDDOCDEF Документ_вид
        |            , $Счет.ЦентрЗатрат ЦентрЗатрат
        |        FROM $Документ.Счет AS Счет  
        |            INNER JOIN _1SJOURN AS Журнал ON Журнал.IDDOC = Счет.IDDOC
        |            INNER JOIN $ДокументСтроки.Счет AS СчетСтроки ON Счет.IDDOC = СчетСтроки.IDDOC
        |        WHERE ((Журнал.CLOSED & 1) = 1)
        |            AND (Журнал.DATE_TIME_IDDOC BETWEEN  :ДатаНач AND :ДатаКон~)
        |            AND ($Счет.Фирма = :ВыбФирма)
        |            AND NOT exists  (SELECT Журнал.IDDOC [Документ $Документ]
        |                             FROM _1SCRDOC AS Отбор With (NOLOCK)
        |                                    INNER JOIN _1SJOURN AS ЖурналРН With (NOLOCK) ON Отбор.CHILDID = ЖурналРН.IDDOC
        |                             WHERE (substring(parentval, 7, 9) = Счет.IDDOC )
        |                                        AND (Отбор.CHILD_DATE_TIME_IDDOC BETWEEN  Журнал.DATE_TIME_IDDOC AND :ДатаКон~)
        |                                    AND ((ЖурналРН.CLOSED & 1) = 1)
        |                                    AND (ЖурналРН.IDDOCDEF = $ВидДокумента.РасходнаяНакладная)
        |                                    AND (Отбор.MDID = 0))
        |                            AND ($Счет.ЦентрЗатрат = :ЦЗ)
        |                            AND ($Счет.РасчетныйЦентр = :Подразделение)
        |            AND ($СчетСтроки.СкладСтрока IN (select val from #спСклад))
        |            AND ($Счет.КлиентскийЗаказНТП = 1)
        |            AND ($СчетСтроки.Товар IN (select val from #спТовар))
        |
        |    UNION ALL
        |
        |        SELECT DISTINCT ТоварныйЧек.IDDOC Документ
        |            , Журнал.IDDOCDEF Документ_вид
        |            , $ТоварныйЧек.ЦентрЗатрат ЦентрЗатрат
        |        FROM  $Документ.ТоварныйЧек AS ТоварныйЧек
        |            INNER JOIN _1SJOURN AS Журнал ON Журнал.IDDOC = ТоварныйЧек.IDDOC
        |            INNER JOIN $ДокументСтроки.ТоварныйЧек AS ТоварныйЧекСтроки ON ТоварныйЧек.IDDOC = ТоварныйЧекСтроки.IDDOC
        |        WHERE ((Журнал.CLOSED & 1) = 1)
        |             AND (Журнал.DATE_TIME_IDDOC BETWEEN  :ДатаНач AND :ДатаКон~)
        |            AND ($ТоварныйЧек.Отгружен = 0)
        |            AND ($ТоварныйЧек.Фирма = :ВыбФирма)
        |            AND ($ТоварныйЧек.ЦентрЗатрат = :ЦЗ)
        |            AND ($ТоварныйЧек.РасчетныйЦентр = :Подразделение)
        |            AND ($ТоварныйЧекСтроки.СкладСтрока IN (select val from #спСклад))
        |            AND ($ТоварныйЧекСтроки.Товар  IN (select val from #спТовар))
        |) AS Подзапрос


помогите оптимизировать запрос,пожалуйста.какие ошибки я допустил,что бы впредь не повторять их?спасибо)
1 ДенисЧ
 
19.09.14
13:48
А план запроса что говорит?
2 dreamoff
 
19.09.14
13:50
я могу только через консоль посмотреть.но не знаю как в нее список значений передать спТовар и спСклад
3 ДенисЧ
 
19.09.14
14:01
(2) Тогда прямые запросы - не для тебя.
Метлу не предлагаю, она занята. А вот оператором мотометлы на базе МТЗ-80 - подойдёшь...
4 Ёпрст
 
19.09.14
14:03
(0) повыкидывать DISTINCT , понавтыкать хинты nolock, добавить условий для попадания в индекс, повыкидывать лишних соединений и тогда.. полетит
5 Ёпрст
 
19.09.14
14:04
ну и вот это
ND NOT exists  (SELECT Журнал.IDDOC [Документ $Документ]

вообще работать не должно
6 КонецЦикла
 
19.09.14
14:06
поипень с _1SCRDOC надо вообще выкинуть
цель-то какая?
если нет возможности поменять структуру - засунь во временную таблицу ЭТО
7 dreamoff
 
19.09.14
14:09
суть что бы счета у которых есть подчиненные документы не попадали
8 Ёпрст
 
19.09.14
14:09
(6) получить счета, на основе которых есть проведенные документы реализации, вестимо