|
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) получить счета, на основе которых есть проведенные документы реализации, вестимо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |