#0
by Холодильник
Проблема - долго выполняется запрос. самое узкое место - где получают таблицу актуальных данных из РС. на входе в пакетный запрос таблица : в регистре(РС, периодический, день) хранятся данные в таком разрезе: Измерения: Товар Ресурсы: Ресурс итого по каждому товару в РС хранится 100500 записей на каждую дату с различными значениями ресурса. нужно получить самое позднее значения на дату товара из входной таблицы. Классическая схема решения - входящую таблицу связываем с РС по условию Товар=Товар и дата>=период. Группируем по макс дате, помещаем во временную табл, затем её связываем вновь с РС по товар = Товар и Датамакс = период. но это выполняется оч долго - если входящая таблица имеет 100 строк, а на каждый товар в РС имеется более 10000 записей(Период<Дата), то получае 1000000 строк в таблице, которую группируем. Нет ли более быстрых схем решения?
#9
by Classic
По товару и периоду. В принципе можно и просто по товару, но в группировке тогда его первым поставь.
#22
by H A D G E H O G s
если входящая таблица имеет 100 строк... в первом пакете имеем сто строк максимум, че вы тут индексировать собрались?
#27
by К_Дач
"итого по каждому товару в РС хранится 100500 записей на каждую дату с различными значениями ресурса. нужно получить самое позднее значения на дату товара из входной таблицы. " так при таком раскладе, если у тебя на дату 100500 значений ресурса для товара - ты их все и получишь. Или я чет не понял?
#31
by Холодильник
к первому подзапросу добавил |ИНДЕКСИРОВАТЬ ПО | Период, теперь запрос выполнился за 122сек, вместо прежних 121
#38
by К_Дач
Тогда я не понимаю тебя, фраза: "самое позднее на дату из входной таблицы" Таблица: Самовар 10.05 РС: 10.05 Самовар 26,75 10.05 Самовар 32,56 10.05 Самовар 98,47 10.05 Самовар 77,84 Теперь объясни мне, какое значение из приведенного примера ты хочешь получить.
#39
by Fragster
+ или выбирать во временную таблицу РазностьДат(КонецДня, Период) и сортировать по возрастанию и юзать стандартные индексы 1с
#40
by Sorm
Сколько раз выполнится "ВЫБРАТЬ ПЕРВЫЕ 1 ДанныеУсловие.Период ИЗ Данные КАК ДанныеУсловие
#42
by Холодильник
чувак, в периодическом (день) регистре ты не сможешь внести несколько записей с 10.05 Самовар РС тебе такого не позволит сделать, записи должны быть уникальны
#43
by Fragster
я план запроса не смотрел этой штуки, если честно :) с выделением максимумов в пределах каждого дня и соединением по = работает быстрее, да
#48
by К_Дач
ну наконец-то, тогда вот тебе пример: Набор1: Набор2: КурсыВалютСрезПоследних.Курс КАК КурсДоллара
#50
by К_Дач
Работать будет сто процентов быстрее, чем твой запрос ко всему регистру с проверкой, больше ли период входящего или нет.
#53
by Fragster
лучше сделать СрезПоследних(минимальнаяДата) Объединить все ФизическаяТаблица где период > минимальная дата и <=Максимальная дата
#54
by Classic
Всегда считал, что коррзапрос медленнее. Но мои проверки показали, что разницы особой нет, если упорядочивание идет по индексу
#55
by К_Дач
И ВТ1.ДатаОперации >= КурсыВалют.Период СГРУППИРОВАТЬ ПО ВТ1.ДатаОперации, ВТ1.ВалютаОперации ИНДЕКСИРОВАТЬ ПО ПериодДляСвязи ВТ2.ДатаОперации, ВТ2.ВалютаОперации, КурсыВалют.Курс ИЗ ВТ2 КАК ВТ2
#59
by К_Дач
Кароче, ребята - Хадгехогс уже все написал. Я в своем примере описал альтернативы. Лично мой опыт (я тестировал оба варианта - и запрос и СКД, показал, что скорость фактически одинаковая)
#60
by H A D G E H O G s
Первый пакетный запрос - он тупо как пример. 2 пакетный получает claster scan потому что селективности мало, счаст попробую ограничить 1 пакетный и глянуть. В остальном - ждем Холодильника.
#61
by К_Дач
с чего вдруг? по сути то это одно и то же, соединение наборов в итоге - это неявное левое соединение. Ты проверял? откуда такие заявления
#64
by Холодильник
классический, времы выполнения 0,031 ВЫБРАТЬ &Валюта1 КАК Валюта, ОБЪЕДИНИТЬ ВЫБРАТЬ ОБЪЕДИНИТЬ ВЫБРАТЬ ВЫБРАТЬ исправленный(по твоей схеме) = 0,046 ВЫБРАТЬ ОБЪЕДИНИТЬ ВЫБРАТЬ ОБЪЕДИНИТЬ ВЫБРАТЬ ВЫБРАТЬ
#71
by Холодильник
120с - это общий запрос в отчете. я хочу протестировать чистый пример на примере курсов валют
#75
by Холодильник
не особо изменилось. Ок, попробую на основном РС, на 120с. Отпишусь о результатах
#76
by kiruha
Есть алгоритм существенно быстрее , но который использует неявное знание структуры назначений ресурсов регистра суть алгоритма 1) Выбираются валюты и даты , но не все а большие(!) ДатаНач и по ДатаКон где ДатаНач меньше требуемой на месяц. Если курс найден - валюта исключается из анализа Таких должно быть 90% 2) ДатаНач сдвигается в прошлое еще на 5 месяцев Ищется курс оставшихся валют Если курс найден валюта исключается из анализа 3)Классич алгоритм без ограничений дата начальной для оставшихся валют (древних ?) Количество сдвигов и шаг можно подбирать исходя из практической потребности задачи Поиск основан на использовании основного индекса Период + [Измерение1 + ...] (Кластерный)
#79
by H A D G E H O G s
Холодильник, давай нажал волшебную комбинацию и меряем. Все напряженно ждут.
#80
by К_Дач
Вообще, в рамках твоей задачи, если есть возможность определить из входящей таблицы самую младшую дату - можно попробовать ограничить выборку ресурсов из регистра, как подсказывает
#81
by Холодильник
а откуда я знаю, какие были последние записи в РС. может Тунисский динар последний раз загружали 2 года назад, а я такой возьму и обрежу выборку на 2 послед месяца.
#82
by kiruha
Рубль Доллар Евро Тунниский динар 10 лет записей 1) Выборка за последний месяц Рубль 1, Доллар 30, Евро 40, Туннисий динар - неопределено просмотрено записей 30*4 против 30*4*12*10 полной выборки Получены курсы Рубль, Доллар Динар помещен во врем таблицу 2) Выборка за последние полгода - только по Динару. Значение неопределено Помещен во врем табл 30*1*6 3) Выборка по всему периоду по Динару - определен курс динара 30*1*6*10 Итого примерно 30*1*6*10 против 30*4*6*10 классического алгоритма Индекс Период+Валюта
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Можно ли ускорить вывод таблицы на экран?
- Помогите с запросом: нужно выбрать срез первых и срез последних.
- Срез последних на каждую дату в запросе
- Срез последних по каждой дате внутри запроса. Как сделать?
- RE: вопрос по теме "Срез последних на каждую дату в запросе"
- Срез последних на каждую дату в запросе.
- Срез последних на каждую дату в запросе
- Как во внутреннем запросе сделать "срез последних" до параметра внешнего запроса
- Как ускорить запрос по регистру?
- Срез последних на каждую дату запросом
- Срез последних на каждую дату
- Формирование движений по партиям товаров и НДС ускорить можно?
В этой группе 1С
- Простое условие в запросе
- Построитель отчета - добавить колонку в запрос
- Среднее значение поля в подвале таблицы
- Зачет авансов при обмене
- штрих-м автозаказ поставщику
- Выгрузка справочник в текстовый документ txt
- УФ процент выполнения
- Конвертация данных. Перенос движений.
- Где лежит конфигурационный файл 1С
- v8: Ошибка СУБД: Microsoft OLE DB Provider for SQL Server:
- Вставить в УТ10.3 СКД на управляемых формах или это изврат?
- Добавление колонки в обработку подбора номенклатуры
- Динамический список регистра на форме - Добавление элемента
- Настройка скидки в 1С УПП - скидки при достижении определенного объема продаж
- v7: Сканер штрих-кодов Symbol LS4278
- Ошибка СУБД. Файл базы данных поврежден ......../1Cv81CD
- 1С 8.3 каковы перспективы?
- ГИС ГМП
- Перенос физ. лиц со всей информацией из ЗУП в ЗУП
- v8: Как удалить "Объект не найден"