|   |   | 
| 
 | как ускорить срез последних на каждую дату | ☑ | ||
|---|---|---|---|---|
| 0
    
        Холодильник 14.11.13✎ 16:01 | 
        Проблема - долго выполняется запрос.
 самое узкое место - где получают таблицу актуальных данных из РС. на входе в пакетный запрос таблица : Товар Дата стол 01.05 Стул 12.09 в регистре(РС, периодический, день) хранятся данные в таком разрезе: Измерения: Товар Ресурсы: Ресурс итого по каждому товару в РС хранится 100500 записей на каждую дату с различными значениями ресурса. нужно получить самое позднее значения на дату товара из входной таблицы. Классическая схема решения - входящую таблицу связываем с РС по условию Товар=Товар и дата>=период. Группируем по макс дате, помещаем во временную табл, затем её связываем вновь с РС по товар = Товар и Датамакс = период. но это выполняется оч долго - если входящая таблица имеет 100 строк, а на каждый товар в РС имеется более 10000 записей(Период<Дата), то получае 1000000 строк в таблице, которую группируем. Нет ли более быстрых схем решения? | |||
| 1
    
        1dvd 14.11.13✎ 16:02 | 
        Запроос покажи. В частности Левое соединение .... ПО ...     | |||
| 2
    
        Холодильник 14.11.13✎ 16:07 | 
        а что там показывать
 |ВЫБРАТЬ | ВТ_Входная.Период, | ВТ_Входная.Товар, | МАКСИМУМ(МойРС.Период) КАК Макспериод |ПОМЕСТИТЬ Связь_ПериодРС |ИЗ | ВТ_ВходнаяКАК ВТ_Входная | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.МойРС КАК МойРС | ПО ВТ_Входная.Товар= МойРС.Товар | И ВТ_Входная.Период >= МойРС.Период | |СГРУППИРОВАТЬ ПО | ВТ_Входная.Период, | ВТ_Входная.Товар | |||
| 3
    
        butterbean 14.11.13✎ 16:08 | 
        если все это критично и постоянно используется - храните таблицу на каждый день     | |||
| 4
    
        bolobol 14.11.13✎ 16:09 | 
        Проиндексируйте     | |||
| 5
    
        Холодильник 14.11.13✎ 16:10 | 
        а потом
 |ВЫБРАТЬ | МойРС.Период, | МойРС.Товар, | МойРС.Ресурс |ИЗ | РегистрСведений.МойРС КАК МойРС | ЛЕВОЕ СОЕДИНЕНИЕ Связь_ПериодРС КАК Связь_ПериодРС | ПО МойРС.Товар= Связь_ПериодРС.Товар | И МойРС.Период = Связь_ПериодРС.Период | |||
| 6
    
        Classic 14.11.13✎ 16:10 | 
        (2)
 Индексируй ВТ здесь поиск по индексу используется и в соединении и в группировке | |||
| 7
    
        Холодильник 14.11.13✎ 16:10 | 
        т.е. правое соединение     | |||
| 8
    
        Холодильник 14.11.13✎ 16:15 | 
        по какому полю индексировать?     | |||
| 9
    
        Classic 14.11.13✎ 16:17 | 
        По товару и периоду.
 В принципе можно и просто по товару, но в группировке тогда его первым поставь. | |||
| 10
    
        К_Дач 14.11.13✎ 16:18 | 
        СКД. Связь наборов данных. Аналогично получению курсов валют на дату     | |||
| 11
    
        К_Дач 14.11.13✎ 16:18 | 
        Явно будет быстрее, чем твое: "ВТ_Входная.Период >= МойРС.Период"     | |||
| 12
    
        H A D G E H O G s 14.11.13✎ 16:19 | 
        У тебя кривой запрос.     | |||
| 13
    
        H A D G E H O G s 14.11.13✎ 16:19 | 
        В (5)     | |||
| 14
    
        Classic 14.11.13✎ 16:20 | 
        (13)
 Он потом написал, что правое :) | |||
| 15
    
        Classic 14.11.13✎ 16:20 | 
        Правда связь надо не по периоду, а по макспериоду делать     | |||
| 16
    
        H A D G E H O G s 14.11.13✎ 16:21 | 
        |            И МойРС.Период = Связь_ПериодРС.Период
 заменить на | И МойРС.Период = Связь_ПериодРС.Макспериод | |||
| 17
    
        Sorm 14.11.13✎ 16:22 | 
        (15)(16)+
 (0) Проиндексировать однако... | |||
| 18
    
        Холодильник 14.11.13✎ 16:23 | 
        (16) да-да.. это я для примера писал     | |||
| 19
    
        H A D G E H O G s 14.11.13✎ 16:23 | 
        Я бы в ВТ отобрал бы Регистр с отбором по Товару и периоду, чебынет.     | |||
| 20
    
        H A D G E H O G s 14.11.13✎ 16:23 | 
        попробовал бы.     | |||
| 21
    
        H A D G E H O G s 14.11.13✎ 16:24 | 
        (17) Че вам это индексирование втемяшилось то...     | |||
| 22
    
        H A D G E H O G s 14.11.13✎ 16:25 | 
        если входящая таблица имеет 100 строк...
 в первом пакете имеем сто строк максимум, че вы тут индексировать собрались? | |||
| 23
    
        andew 14.11.13✎ 16:25 | 
        (21) гы-гы     | |||
| 24
    
        Холодильник 14.11.13✎ 16:26 | 
        (19) это как? задать условия для РС?     | |||
| 25
    
        H A D G E H O G s 14.11.13✎ 16:26 | 
        2 раза ползают по таблице регистра, вот тут цимес.     | |||
| 26
    
        H A D G E H O G s 14.11.13✎ 16:26 | 
        счаст попробую написать     | |||
| 27
    
        К_Дач 14.11.13✎ 16:28 | 
        "итого по каждому товару в РС хранится 100500 записей на каждую дату с различными значениями ресурса. 
 нужно получить самое позднее значения на дату товара из входной таблицы. " так при таком раскладе, если у тебя на дату 100500 значений ресурса для товара - ты их все и получишь. Или я чет не понял? | |||
| 28
    
        Холодильник 14.11.13✎ 16:29 | 
        (27) мне нужно - самое позднее на дату из входной таблицы     | |||
| 29
    
        andew 14.11.13✎ 16:29 | 
        (10) +1     | |||
| 30
    
        Classic 14.11.13✎ 16:30 | 
        ВЫБРАТЬ
 вт.Товар, РС.Измерение Из вт КАК вт ЛЕВОЕ СОЕДИНЕНИЕ РС КАК РС ПО вт.Товар = РС.Товар И РС.Период В (ВЫБРАТЬ ПЕРВЫЕ 1 ИЗ РС КАК РС1 ГДЕ РС1.Товар = РС.Товар И РС1.Период <= вт.период УПОРЯДОЧИТЬ ПО РС1.Период УБЫВ ) | |||
| 31
    
        Холодильник 14.11.13✎ 16:32 | 
        к первому подзапросу добавил
 |ИНДЕКСИРОВАТЬ ПО | Период, | товар теперь запрос выполнился за 122сек, вместо прежних 121 | |||
| 32
    
        H A D G E H O G s 14.11.13✎ 16:33 | 
        (31) А ты догадайся почему.     | |||
| 33
    
        К_Дач 14.11.13✎ 16:34 | 
        У тебя периодичность "в пределах секунды" что ли?     | |||
| 34
    
        Холодильник 14.11.13✎ 16:34 | 
        (32) а хз.. с индексацией раньше не работал
 (33) в днях, написал ж | |||
| 35
    
        H A D G E H O G s 14.11.13✎ 16:35 | 
        (30) Это что за покемон?     | |||
| 36
    
        Fragster модератор 14.11.13✎ 16:36 | 
        ВЫБРАТЬ
 1 КАК Период, "А" КАК Значение ПОМЕСТИТЬ Данные ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2, "Б" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4, "А" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9, "Б" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Данные.Период, Данные.Значение, ДанныеПредыдущие.Период КАК Период1, ДанныеПредыдущие.Значение КАК Значение1 ИЗ Данные КАК Данные ЛЕВОЕ СОЕДИНЕНИЕ Данные КАК ДанныеПредыдущие ПО Данные.Значение = ДанныеПредыдущие.Значение И (ДанныеПредыдущие.Период В (ВЫБРАТЬ ПЕРВЫЕ 1 ДанныеУсловие.Период ИЗ Данные КАК ДанныеУсловие ГДЕ ДанныеУсловие.Значение = Данные.Значение И ДанныеУсловие.Период < Данные.Период УПОРЯДОЧИТЬ ПО ДанныеУсловие.Период УБЫВ)) | |||
| 37
    
        Fragster модератор 14.11.13✎ 16:37 | 
        главное в скуле индекс подшаманить по Данные.Значение + Данные.Период Убыв     | |||
| 38
    
        К_Дач 14.11.13✎ 16:38 | 
        Тогда я не понимаю тебя, фраза: "самое позднее на дату из входной таблицы"
 Таблица: Самовар 10.05 РС: 10.05 Самовар 26,75 10.05 Самовар 32,56 10.05 Самовар 98,47 10.05 Самовар 77,84 Теперь объясни мне, какое значение из приведенного примера ты хочешь получить. | |||
| 39
    
        Fragster модератор 14.11.13✎ 16:38 | 
        (37)+ или выбирать во временную таблицу РазностьДат(КонецДня, Период) и сортировать по возрастанию и юзать стандартные индексы 1с     | |||
| 40
    
        Sorm 14.11.13✎ 16:39 | 
        (36) Сколько раз выполнится "ВЫБРАТЬ ПЕРВЫЕ 1
 ДанныеУсловие.Период ИЗ Данные КАК ДанныеУсловие ГДЕ ДанныеУсловие.Значение = Данные.Значение И ДанныеУсловие.Период < Данные.Период УПОРЯДОЧИТЬ ПО ДанныеУсловие.Период УБЫВ" ? | |||
| 41
    
        К_Дач 14.11.13✎ 16:40 | 
        +38 и как вообще такая ситуация может быть в регистре сведений     | |||
| 42
    
        Холодильник 14.11.13✎ 16:40 | 
        (38) чувак, в периодическом (день) регистре ты не сможешь внести несколько записей с 10.05 Самовар 
 РС тебе такого не позволит сделать, записи должны быть уникальны | |||
| 43
    
        Fragster модератор 14.11.13✎ 16:40 | 
        (40) я план запроса не смотрел этой штуки, если честно :)
 с выделением максимумов в пределах каждого дня и соединением по = работает быстрее, да | |||
| 44
    
        Ненавижу 1С гуру 14.11.13✎ 16:41 | ||||
| 45
    
        К_Дач 14.11.13✎ 16:42 | 
        (42) так я про тоже! А ты написал в (0) что у тебя на КАЖДУЮ дату 100500 записей.     | |||
| 46
    
        Fragster модератор 14.11.13✎ 16:42 | 
        (40) наверное по количеству строк основной таблицы     | |||
| 47
    
        Холодильник 14.11.13✎ 16:43 | 
        (45) ок, не на каждую.. вобщем - это тот же РС Курсы валют     | |||
| 48
    
        К_Дач 14.11.13✎ 16:48 | 
        (47) ну наконец-то, тогда вот тебе пример:
 Набор1: ////// ВЫБРАТЬ НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, ДЕНЬ) КАК ДатаОперации, ХозрасчетныйОбороты.СуммаОборот КАК СуммаРубли ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(, , Регистратор, Счет В (&СписокСчетов), , , НЕ КорСчет В (&СписокСчетов), ) КАК ХозрасчетныйОбороты ////// Набор2: ////// ВЫБРАТЬ &ДатаСреза КАК ДатаКурсаДоллара, КурсыВалютСрезПоследних.Курс КАК КурсДоллара ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта = &Доллар) КАК КурсыВалютСрезПоследних /////// Связь: Источник-Приемник-Параметр ДатаОперации-ДатаКурсаДоллара-ДатаСреза | |||
| 49
    
        H A D G E H O G s 14.11.13✎ 16:49 | 
        ВЫБРАТЬ
 Номенклатура.Ссылка КАК Номенклатура, &ТекущаяДата КАК Дата ПОМЕСТИТЬ Товары ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЭтоГруппа = ЛОЖЬ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЦеныНоменклатуры.Номенклатура КАК Номенклатура, ЦеныНоменклатуры.Цена, ЦеныНоменклатуры.Период КАК Период ПОМЕСТИТЬ ЦеныНоменклатуры ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ВНУТРЕННЕЕ СОЕДИНЕНИЕ Товары КАК Товары ПО ЦеныНоменклатуры.Номенклатура = Товары.Номенклатура и ЦеныНоменклатуры.Период <= Товары.Дата ИНДЕКСИРОВАТЬ ПО Номенклатура, Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЦеныНоменклатуры.Номенклатура, МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период ПОМЕСТИТЬ ЦеныНоменклатурыМаксимум ИЗ ЦеныНоменклатуры КАК ЦеныНоменклатуры СГРУППИРОВАТЬ ПО ЦеныНоменклатуры.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.Цена ИЗ ЦеныНоменклатурыМаксимум КАК ЦеныНоменклатурыМаксимум ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО ЦеныНоменклатурыМаксимум.Номенклатура = ЦеныНоменклатуры.Номенклатура И ЦеныНоменклатурыМаксимум.Период = ЦеныНоменклатуры.Период | |||
| 50
    
        К_Дач 14.11.13✎ 16:49 | 
        Работать будет сто процентов быстрее, чем твой запрос ко всему регистру с проверкой, больше ли период входящего или нет.     | |||
| 51
    
        ILM гуру 14.11.13✎ 16:50 | 
        А что там СРЕЗПОСЛЕДНИХ() уже не кошерно?     | |||
| 52
    
        К_Дач 14.11.13✎ 16:51 | ||||
| 53
    
        Fragster модератор 14.11.13✎ 16:52 | 
        (49) лучше сделать СрезПоследних(минимальнаяДата) Объединить все ФизическаяТаблица где период > минимальная дата и <=Максимальная дата     | |||
| 54
    
        Classic 14.11.13✎ 16:52 | 
        (50)
 Всегда считал, что коррзапрос медленнее. Но мои проверки показали, что разницы особой нет, если упорядочивание идет по индексу | |||
| 55
    
        К_Дач 14.11.13✎ 16:53 | 
        ВЫБРАТЬ РАЗРЕШЕННЫЕ
 ДатаОперации, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Валютный ТОГДА ХозрасчетныйОбороты.Валюта КОГДА ХозрасчетныйОбороты.КорСчет.Валютный ТОГДА ХозрасчетныйОбороты.ВалютаКор ИНАЧЕ &Рубль КОНЕЦ КАК ВалютаОперации Поместить ВТ1 ИЗ РБ.Хозрасчетный.Обороты ; //////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ВТ1.ДатаОперации, ВТ1.ВалютаОперации, МАКСИМУМ(КурсыВалют.Период) КАК ПериодДляСвязи ПОМЕСТИТЬ ВТ2 ИЗ ВТ1 КАК ВТ1 ЛЕВОЕ СОЕДИНЕНИЕ РС.КурсыВалют КАК КурсыВалют ПО ВТ1.ВалютаОперации = КурсыВалют.Валюта И ВТ1.ДатаОперации >= КурсыВалют.Период СГРУППИРОВАТЬ ПО ВТ1.ДатаОперации, ВТ1.ВалютаОперации ИНДЕКСИРОВАТЬ ПО ПериодДляСвязи ; //////////////////////////////////////////// ВЫБРАТЬ ВТ2.ДатаОперации, ВТ2.ВалютаОперации, КурсыВалют.Курс ИЗ ВТ2 КАК ВТ2 ЛЕВОЕ СОЕДИНЕНИЕ РС.КурсыВалют КАК КурсыВалют ПО ВТ2.ПериодДляСвязи = КурсыВалют.Период И ВТ2.ВалютаОперации = КурсыВалют.Валюта | |||
| 56
    
        Classic 14.11.13✎ 16:53 | 
        (53)
 А разве СрезПоследних не тот же подзапрос? | |||
| 57
    
        Fragster модератор 14.11.13✎ 16:55 | 
        (56) просто потом соединять меньше     | |||
| 58
    
        х86 14.11.13✎ 16:55 | 
        (48)эта бня на больших объёмах отъедает стотыщ питсот гигов памяти и падает     | |||
| 59
    
        К_Дач 14.11.13✎ 16:55 | 
        Кароче, ребята - Хадгехогс уже все написал. Я в своем примере описал альтернативы. Лично мой опыт (я тестировал оба варианта - и запрос и СКД, показал, что скорость фактически одинаковая)     | |||
| 60
    
        H A D G E H O G s 14.11.13✎ 16:57 | 
        Первый пакетный запрос - он тупо как пример.
 2 пакетный получает claster scan потому что селективности мало, счаст попробую ограничить 1 пакетный и глянуть. В остальном - ждем Холодильника. | |||
| 61
    
        К_Дач 14.11.13✎ 16:57 | 
        (58) с чего вдруг? по сути то это одно и то же, соединение наборов в итоге - это неявное левое соединение. Ты проверял? откуда такие заявления     | |||
| 62
    
        х86 14.11.13✎ 16:58 | 
        (61)да, правда года полтора назад )
 мошт релиз кривой был | |||
| 63
    
        Classic 14.11.13✎ 16:59 | 
        (57)
 Да, наверное | |||
| 64
    
        Холодильник 14.11.13✎ 17:01 | 
        (60) 
 классический, времы выполнения 0,031 ВЫБРАТЬ &Валюта1 КАК Валюта, &дата1 КАК Дата ПОМЕСТИТЬ ВТ ОБЪЕДИНИТЬ ВЫБРАТЬ &Валюта2, &дата2 ОБЪЕДИНИТЬ ВЫБРАТЬ &Валюта3, &дата3 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Валюта, МАКСИМУМ(КурсыВалют.Период) КАК ПериодМакс ПОМЕСТИТЬ ТаблицаМакс ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ВТ.Валюта = КурсыВалют.Валюта И ВТ.Дата >= КурсыВалют.Период СГРУППИРОВАТЬ ПО ВТ.Валюта ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КурсыВалют.Валюта, КурсыВалют.Период, КурсыВалют.Курс ИЗ ТаблицаМакс КАК ТаблицаМакс ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ТаблицаМакс.Валюта = КурсыВалют.Валюта И ТаблицаМакс.ПериодМакс = КурсыВалют.Период --------- исправленный(по твоей схеме) = 0,046 ВЫБРАТЬ &Валюта1 КАК Валюта, &дата1 КАК Дата ПОМЕСТИТЬ ВТ ОБЪЕДИНИТЬ ВЫБРАТЬ &Валюта2, &дата2 ОБЪЕДИНИТЬ ВЫБРАТЬ &Валюта3, &дата3 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Валюта КАК Валюта, КурсыВалют.Период КАК Период ПОМЕСТИТЬ ТаблицаВалютаПериод ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ВТ.Валюта = КурсыВалют.Валюта И ВТ.Дата >= КурсыВалют.Период ИНДЕКСИРОВАТЬ ПО Валюта, Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаВалютаПериод.Валюта, МАКСИМУМ(ТаблицаВалютаПериод.Период) КАК ПериодМакс ПОМЕСТИТЬ ТаблицаМакс ИЗ ТаблицаВалютаПериод КАК ТаблицаВалютаПериод СГРУППИРОВАТЬ ПО ТаблицаВалютаПериод.Валюта ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КурсыВалют.Валюта, КурсыВалют.Период, КурсыВалют.Курс ИЗ ТаблицаМакс КАК ТаблицаМакс ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ТаблицаМакс.Валюта = КурсыВалют.Валюта И ТаблицаМакс.ПериодМакс = КурсыВалют.Период | |||
| 65
    
        H A D G E H O G s 14.11.13✎ 17:03 | 
        (64) 
 теперь запрос выполнился за 122сек, вместо прежних 121 давай в секундах | |||
| 66
    
        Холодильник 14.11.13✎ 17:04 | 
        косяк, в последнем соединяться не с РС, а с ТаблицаВалютаПериод ..ща     | |||
| 67
    
        К_Дач 14.11.13✎ 17:04 | 
        Индексировать не по Период, а по ПериодМакс     | |||
| 68
    
        Холодильник 14.11.13✎ 17:04 | 
        (65) в 64 - время в секундах. стандартная БП, консоль Чистова     | |||
| 69
    
        H A D G E H O G s 14.11.13✎ 17:05 | 
        (68) А раньше?     | |||
| 70
    
        Холодильник 14.11.13✎ 17:08 | 
        (69) в 64:
 первый запрос = 0,031с второй = 0,046 третий = 0,063. текст третьего: ВЫБРАТЬ &Валюта1 КАК Валюта, &дата1 КАК Дата ПОМЕСТИТЬ ВТ ОБЪЕДИНИТЬ ВЫБРАТЬ &Валюта2, &дата2 ОБЪЕДИНИТЬ ВЫБРАТЬ &Валюта3, &дата3 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Валюта КАК Валюта, КурсыВалют.Период КАК Период , КурсыВалют.Курс КАК Курс ПОМЕСТИТЬ ТаблицаВалютаПериод ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ВТ.Валюта = КурсыВалют.Валюта И ВТ.Дата >= КурсыВалют.Период ИНДЕКСИРОВАТЬ ПО Валюта, Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаВалютаПериод.Валюта, МАКСИМУМ(ТаблицаВалютаПериод.Период) КАК ПериодМакс ПОМЕСТИТЬ ТаблицаМакс ИЗ ТаблицаВалютаПериод КАК ТаблицаВалютаПериод СГРУППИРОВАТЬ ПО ТаблицаВалютаПериод.Валюта ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КурсыВалют.Валюта, КурсыВалют.Период, КурсыВалют.Курс ИЗ ТаблицаМакс КАК ТаблицаМакс ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаВалютаПериод КАК КурсыВалют ПО ТаблицаМакс.Валюта = КурсыВалют.Валюта И ТаблицаМакс.ПериодМакс = КурсыВалют.Период | |||
| 71
    
        Холодильник 14.11.13✎ 17:10 | 
        (65) 120с - это общий запрос в отчете. я хочу протестировать чистый пример на примере курсов валют     | |||
| 72
    
        H A D G E H O G s 14.11.13✎ 17:11 | 
        (71) Ты охеренно тестируешь с разницей в десяток миллисекунд.     | |||
| 73
    
        К_Дач 14.11.13✎ 17:12 | 
        (70) добавь "индексировать по ПериодМакс" перед последним левым соединением     | |||
| 74
    
        Холодильник 14.11.13✎ 17:13 | 
        (72) запускаю раз 10, показывает одно и тоже время выполнения с погрешностью в 1мс     | |||
| 75
    
        Холодильник 14.11.13✎ 17:15 | 
        (73) не особо изменилось.
 Ок, попробую на основном РС, на 120с. Отпишусь о результатах | |||
| 76
    
        kiruha 14.11.13✎ 17:32 | 
        (0)
 Есть алгоритм существенно быстрее , но который использует неявное знание структуры назначений ресурсов регистра суть алгоритма 1) Выбираются валюты и даты , но не все а большие(!) ДатаНач и по ДатаКон где ДатаНач меньше требуемой на месяц. Если курс найден - валюта исключается из анализа Таких должно быть 90% 2) ДатаНач сдвигается в прошлое еще на 5 месяцев Ищется курс оставшихся валют Если курс найден валюта исключается из анализа 3)Классич алгоритм без ограничений дата начальной для оставшихся валют (древних ?) Количество сдвигов и шаг можно подбирать исходя из практической потребности задачи Поиск основан на использовании основного индекса Период + [Измерение1 + ...] (Кластерный) | |||
| 77
    
        К_Дач 14.11.13✎ 17:38 | 
        (75) ну че там, мне интересно     | |||
| 78
    
        Холодильник 14.11.13✎ 17:41 | 
        (77) завтра.. рабочий день почти закончился, лень     | |||
| 79
    
        H A D G E H O G s 14.11.13✎ 17:43 | 
        (78) Холодильник, давай нажал волшебную комбинацию и меряем. Все напряженно ждут.     | |||
| 80
    
        К_Дач 14.11.13✎ 17:45 | 
        Вообще, в рамках твоей задачи, если есть возможность определить из входящей таблицы самую младшую дату - можно попробовать ограничить выборку ресурсов из регистра, как подсказывает (76)     | |||
| 81
    
        Холодильник 14.11.13✎ 17:50 | 
        (80) а откуда я знаю, какие были последние записи в РС. может Тунисский динар последний раз загружали 2 года назад, а я такой возьму и обрежу выборку на 2 послед месяца.     | |||
| 82
    
        kiruha 14.11.13✎ 18:36 | 
        (81)
 Рубль Доллар Евро Тунниский динар 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 классического алгоритма Индекс Период+Валюта | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |