Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Влияние типов значений в индексированной таблице на скорость индексирования (число прочтений - 1391 )
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Влияние типов значений в индексированной таблице на скорость индексирования
28. Ноября 2010 :: 02:36
Печать  
Объясните, пожалуйста, первокласснику - в чем тут собака порылась:

Использую 1с++ 3.2.3.1
Загружаю результат прямого запроса в индексированную таблицу итзОстатки. Среди прочих имею в ней колонки:
Наименование - тип Строка
Товар - тип Справочник.Товары
Счет - тип Счет.Основной
Остаток, Сумма - тип Число

Далее создаю индекс, и выполняю такой код:
Код
Выбрать все
итзОстатки.ДобавитьИндекс("иОтборТовара", "Товар, Счет");
итз = итзОстатки.Копия(1);
итз.Свернуть(, "Остаток, Сумма", "иОтборТовара"); 



В результате в свернутой таблице 5219 строк:
Всего время, мс.: 9412   Выполнение запроса: 1289   Обработка результатов запроса: 8123, в т.ч. (по замеру в отладчике):
2067 итзОстатки.ДобавитьИндекс
4329 итз = итзОстатки.Копия
1978 итз.Свернуть
= Что-то долго... (

Добавляю в начало индекса Наименование, остальное все то же:
Код
Выбрать все
итзОстатки.ДобавитьИндекс("иОтборТовара", "Наименование, Товар, Счет");
 


В результате в свернутой таблице 5219 строк:
Всего время, мс.: 2230   Выполнение запроса: 1132   Обработка результатов запроса: 1098, в т.ч. (по замеру в отладчике):
303 итзОстатки.ДобавитьИндекс
699 итз = итзОстатки.Копия
175 итз.Свернуть
= Уже лучше.. )

Переставляю Наименование в конец индекса:
Код
Выбрать все
итзОстатки.ДобавитьИндекс("иОтборТовара", "Товар, Счет, Наименование"); 


Всего время, мс.: 9456   Выполнение запроса: 1351   Обработка результатов запроса: 8105
= Долго, как в первом случае..

Чего это?.. Получается, что для быстрого индексирования в начале индекса должно быть строковое значение?.. С методом Группировать() та же картина..

Это толкнуло пойти дальше и добавить в запрос нетипизированные значения ТоварИД и СчетИД - строковые идентификаторы объектов для использования в индексах:
Код
Выбрать все
итзОстатки.ДобавитьИндекс("иОтборТовара", "ТоварИД, СчетИД"); 



Всего время, мс.: 1215   Выполнение запроса: 1102   Обработка результатов запроса: 113
= Это уже чудно! Так и будем продолжать! Но вопрос таки остался - Ясное дело, что нужно потратить некоторое время на преобразование типов Товар и Счет при создании индекса, но каким макаром на это преобразование положительно влияет строковое значение Наименования в начале ключа?  Озадачен
« Последняя редакция: 28. Ноября 2010 :: 13:13 - BlueWind »  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Влияние типов значений в индексированной таблице на скорость индексирования
Ответ #1 - 28. Ноября 2010 :: 10:03
Печать  
а если написать вот так:
Код
Выбрать все
итзОстатки.ДобавитьИндекс("иОтборТовара", "*Товар,*Счет"); 

  
Наверх
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Влияние типов значений в индексированной таблице на скорость индексирования
Ответ #2 - 28. Ноября 2010 :: 13:08
Печать  
leshik писал(а) 28. Ноября 2010 :: 10:03:
а если написать вот так:
Код
Выбрать все
итзОстатки.ДобавитьИндекс("иОтборТовара", "*Товар,*Счет"); 



Обработка результатов запроса: 111  Очень довольный
Да! Если написать так, получается лучше всего, т.к. не нужно формировать колонки с идентификаторами, а по скорости выходит то же. Спасибо за наводку.

И все же.. Получается, что не на преобразование типов тратится время в случае индекса "Товар, Счет", ибо с модификатором все отрабатывает практически мгновенно. Попробовал такие варианты:

Индексное выражение: Наименование, Товар, Счет
Обработка результатов запроса: 1105

Индексное выражение: ТоварИД, Товар, Счет
Обработка результатов запроса: 956

Индексное выражение: *Товар, Товар, Счет
Обработка результатов запроса: 935

Индексное выражение: Товар, Счет
Обработка результатов запроса: 8123

Глядя на последние два варианта, хочется все же понять, во что преобразуется Товар,Счет когда в начале ключа нет строкового значения, и в результате индекс становится тяжелым, причем это сказывается не только на построении индекса, а утяжеляет и дальнейшие манипуляции с таблицей - Копия, Свернуть и т.п.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Влияние типов значений в индексированной таблице на скорость индексирования
Ответ #3 - 28. Ноября 2010 :: 13:48
Печать  
1. По поводу перестановок и сложности построения индека - что-нибудь на тему селективности надо почитать.
Плюс нужно добиться понимания, как вообще устроен составной индекс.
Это принципиально.

2. По поводу скорости сравнения различных типов - поиск по этому форуму, а, возможно и по форуму на itland.ru.
Всю историю развития ИТ можно найти.
Весьма интересная история, кстати.

Если не получится - я еще раз объясню, но уже не так красиво, как делал это раньше.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать