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