Имя: Пароль:
1C
1С v8
Получение данных из Регистра сведений
0 guitar_player
 
01.08.11
21:00
Есть регистр сведений в котором 1,7 млн записей.
Простая выборка из него занимает порядка 8ми секунд

ВЫБРАТЬ
   СкидкиНаценкиНоменклатурыСрезПоследних.Номенклатура,
   СкидкиНаценкиНоменклатурыСрезПоследних.ПолучательСкидки,
   СкидкиНаценкиНоменклатурыСрезПоследних.ТипЦен,
   СкидкиНаценкиНоменклатурыСрезПоследних.ВидСкидки,
   СкидкиНаценкиНоменклатурыСрезПоследних.Значение
ИЗ
   РегистрСведений.СкидкиНаценкиНоменклатуры.СрезПоследних(
           &Период,
           Номенклатура В
                   (ВЫБРАТЬ РАЗЛИЧНЫЕ
                       ВТ_ТаблицаНоменклатуры.Номенклатура
                   ИЗ
                       ВТ_ТаблицаНоменклатуры КАК ВТ_ТаблицаНоменклатуры)
               И ТипЦен = &ТипЦен
               И ПолучательСкидки В (&П1, &П2, &П3)) КАК СкидкиНаценкиНоменклатурыСрезПоследних


в ВТ_ТаблицаНоменклатуры примерно 800 уникальных записей

Регистр имеет 3 измерения Номенклатура, ТипЦены, ПолучательСкидки(составной - 3 типа. П1, П2, П3 как раз разного типа).

Подскажите, пожалуйста, есть какой нибудь вариант как можно улучшить работу запроса? Кроме как переделывать структуру регистра, хотя не уверен, что переделка исправит положение.
1 Мастер1С
 
01.08.11
21:15
ну ты барин задачки ставишь...
2 Doomer
 
01.08.11
21:16
(0) Поменять железо не предлагать?
3 Reset
 
01.08.11
21:46
Попробуй так задать условие:
               ПолучательСкидки В (&П1, &П2, &П3)
               И ТипЦен = &ТипЦен
И Номенклатура В
                   (ВЫБРАТЬ РАЗЛИЧНЫЕ
                       ВТ_ТаблицаНоменклатуры.Номенклатура
                   ИЗ
                       ВТ_ТаблицаНоменклатуры КАК ВТ_ТаблицаНоменклатуры))

Не уверен что поможет, но попытка не пытка
4 Grusswelle
 
01.08.11
21:47
(0) Индексы не предлагать?
5 Grusswelle
 
01.08.11
21:50
(0) + Номенклатуры сколько? Сначала сформировать список номенклатуры, например, потом задать его в качестве параметра?
6 acsent
 
01.08.11
21:51
попробуй убрать РАЗЛИЧНЫЕ
7 acsent
 
01.08.11
21:52
передвинь номенклатуру на последнее место
8 guitar_player
 
02.08.11
06:01
(4) предлагать
(5) так и есть в ВТ_ТаблицаНоменклатуры отобранная номенклатура для заказа. Проанализировав шаблоны заказов получается в среднем в выборке уникальной номенклатуры 800шт.
(3),(6), (7) спасибо, сейчас доберусь до компа с базой проверю.
Может изменить порядок измерений в регистре?
Сейчас - Номенклатура, Получатель, ТипЦены.
9 braslavets
 
02.08.11
08:58
(0) Вообще, конструкции типа "что-то В (что-то там)" довольно тяжелые для оптимизатора. Я бы попробовал ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Сколько записей возвращает запрос? Насколько актуально получение среза цен на произвольную дату? Может есть смысл сделать регистр, в котором держать "срез последних" и обращаться к нему?
10 Широкий
 
02.08.11
09:10
Убери различные
11 Широкий
 
02.08.11
09:12
если ПолучательСкидки это контрагент - поставь его первым измерением.. ИМХО записи будут более уникальны
12 Axel2009
 
02.08.11
09:16
ВЫБРАТЬ
   СкидкиНаценкиНоменклатурыСрезПоследних.Номенклатура,
   СкидкиНаценкиНоменклатурыСрезПоследних.ПолучательСкидки,
   СкидкиНаценкиНоменклатурыСрезПоследних.ТипЦен,
   СкидкиНаценкиНоменклатурыСрезПоследних.ВидСкидки,
   СкидкиНаценкиНоменклатурыСрезПоследних.Значение
ИЗ
   РегистрСведений.СкидкиНаценкиНоменклатуры.СрезПоследних(
           &Период,
           Номенклатура В
                   (ВЫБРАТЬ РАЗЛИЧНЫЕ
                       ВТ_ТаблицаНоменклатуры.Номенклатура
                   ИЗ
                       ВТ_ТаблицаНоменклатуры КАК ВТ_ТаблицаНоменклатуры)
               И ТипЦен = &ТипЦен
               И ПолучательСкидки В (&П1)) КАК СкидкиНаценкиНоменклатурыСрезПоследних
сколько выполняется?
13 Широкий
 
02.08.11
09:20
ПолучательСкидки(составной - 3 типа. П1, П2, П3 как раз разного типа).
Ааа. Вот она собака и порылась. Попробуй сделать или через "ИЛИ" и объекидением 3-ех запросов