Имя: Пароль:
1C
1С v8
оптимизация запроса
0 Domanoff26
 
13.06.12
14:24
есть запрос  с временной таблицей, работает чего то не ахти как быстро, хотя строчек кот наплакал

ВЫБРАТЬ
   ВыбрНоменклатура.Цена КАК Цена,
   Срез.Цена КАК стараяЦена,
   ВыбрНоменклатура.Номенклатура,
   Срез.Валюта
ИЗ
   (ВЫБРАТЬ
       ВЫБОР
           КОГДА ЦеныСрезПоследних.Валюта = &Валюта
               ТОГДА ЦеныСрезПоследних.Цена
           ИНАЧЕ ВЫРАЗИТЬ(ЦеныСрезПоследних.Цена * КурсыВалютСрезПоследних.Курс КАК ЧИСЛО(15, 2))
       КОНЕЦ КАК Цена,
       ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
       КурсыВалютСрезПоследних.Валюта КАК Валюта
   ИЗ
       РегистрСведений.Цены.СрезПоследних(&дата, Организация = &организация) КАК ЦеныСрезПоследних
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, ) КАК КурсыВалютСрезПоследних
           ПО ЦеныСрезПоследних.Валюта = КурсыВалютСрезПоследних.Валюта
   ГДЕ
       (НЕ ЦеныСрезПоследних.Цена ЕСТЬ NULL )
       И ЦеныСрезПоследних.ТипЦен = &ТипЦен) КАК Срез
       ЛЕВОЕ СОЕДИНЕНИЕ ВыбрНоменклатура КАК ВыбрНоменклатура
       ПО Срез.Номенклатура = ВыбрНоменклатура.Номенклатура
ГДЕ
   ((Срез.Цена - ВыбрНоменклатура.Цена) * 100 / Срез.Цена > &Проц
           ИЛИ (Срез.Цена - ВыбрНоменклатура.Цена) * 100 / Срез.Цена < -&Проц)

что посоветуете?
1 Renat11111
 
13.06.12
14:27
А где временная таблица?
2 H A D G E H O G s
 
13.06.12
14:27
Тот редкий случай, когда
Размер не имеет значение.
3 Domanoff26
 
13.06.12
14:30
(1)  ВыбрНоменклатура
4 Domanoff26
 
13.06.12
14:30
банально забыл про ограничение по номенклатуре
5 Domanoff26
 
13.06.12
14:31
в срезе цен
6 Renat11111
 
13.06.12
14:31
ГДЕ
      (НЕ ЦеныСрезПоследних.Цена ЕСТЬ NULL )
      И ЦеныСрезПоследних.ТипЦен = &ТипЦен) КАК Срез


В параметры Вирт таблицы, вложеннные запросы переделай на вт, индексируй поля вт, по которым соединяешь.
7 Renat11111
 
13.06.12
14:32
не по-русски написал ГДЕ
     (НЕ ЦеныСрезПоследних.Цена ЕСТЬ NULL )
     И ЦеныСрезПоследних.ТипЦен = &ТипЦен) КАК Срез

вот это перенеси в параметры виртуальной таблицы
8 Domanoff26
 
13.06.12
14:34
(6) (7) спасибо
9 Нуф-Нуф
 
13.06.12
14:35
сначала получи результат запроса к виртуальной таблице во временную, а потом с ней соединяй.
не рекомендуется выполнять соединение с виртуальными таблицами - сказывается на производительности
10 Renat11111
 
13.06.12
14:36
(4) думаю это догадаешься тоже сделать в параметрах ВТ )))
11 Нуф-Нуф
 
13.06.12
14:37
и меньше используй вложенных таблиц
AdBlock убивает бесплатный контент. 1Сергей