Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) долго  отрабатывает "ДобавитьИндекс"  так и должно быть? (число прочтений - 4907 )
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
24. Июня 2009 :: 06:11
Печать  
Ранее не использовал Индексированную таблицу, всегда обрабатывал результаты запроса в ТЗ, но в одном случае решил попробовать, т.к. понадобилось из всей массы товаров полученных в запросе найти один и обработать по формуле
пробовал так:

Код
Выбрать все
// выше запрос
  ТЗ=СоздатьОбъект("ИндексированнаяТаблица");
	RS.ВыполнитьИнструкцию(ТекстЗапроса,ТЗ);



  ЖДТовар=ЭлементПоКоду("Номенклатура",5);
	ТЗ.ДобавитьИндекс("ЖД","-Товар");
	ТЗ.УстановитьФильтр(ЖДТовар,ЖДТовар,"ЖД",);
	ТЗ.ВыбратьСтроки("ЖД");
	Пока ТЗ.ПолучитьСтроку("ЖД",)=1 Цикл
		Док=ТЗ.Док;
		Если Док.ДокОснование.Вид()="ЗаявкаНакладная" Тогда
			ТЗ.СуммаЗакуп=0;
		Иначе
			ТЗ.Сумма=0;
			ТЗ.СуммаЗакуп=0;
		КонецЕсли;
	КонецЦикла;

 



без этого фрагмента кода отчет работает достаточно быстро, но с подключением этого кода время формирования увеличивается НА 2 МИН, собственно долго происходит создание индекса
это неприемлимо.

Т.е. получатся выигрыша в сравнении спростым перебором строк просто нет, или я что-то неправильно делаю
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #1 - 24. Июня 2009 :: 08:58
Печать  
Код
Выбрать все
ТЗ.ДобавитьИндекс("ЖД","*Товар"); 


  
Наверх
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #2 - 24. Июня 2009 :: 10:20
Печать  
Поправил,
вроде стало побыстрее, но по сравнению со штатной ТЗ.НайтиЗначение() - значительно проигрывает в скорости

добавил в ТЗ колонку Товар2 - рядом с уже имеющейся "Товар"
и получается, что такой код работает намного быстрее чем с использованием индексированной ТЗ
(хоть и говорят, что НайтиЗначение - работает перебором)
Код
Выбрать все
  ЖДТовар=ЭлементПоКоду("Номенклатура",5);
	НомСтр=0;НомКол=0;
	Пока ТЗ.НайтиЗначение(ЖДТовар,НомСтр,"Товар2")=1 Цикл
		Док=ТЗ.ПолучитьЗначение(НомСтр,"Док");
		Если Док.ДокОснование.Вид()="ЗаявкаНакладная" Тогда
			ТЗ.УстановитьЗначение(НомСтр,"СуммаЗакуп",0);
			ТЗ.УстановитьЗначение(НомСтр,"Товар2","");
		Иначе
			ТЗ.УстановитьЗначение(НомСтр,"Сумма",0);
			ТЗ.УстановитьЗначение(НомСтр,"СуммаЗакуп",0);
			ТЗ.УстановитьЗначение(НомСтр,"Товар2","");
		КонецЕсли;

		НомСтр=0;НомКол=0;
	КонецЦикла;
// предполагается, что вхождений в ТЗ этого товара несколько
 



  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #3 - 24. Июня 2009 :: 10:55
Печать  
Я бы строил SQL-запрос уже по нужным товарам, а глядя на время построения индекса, можно предположить, что в ИТЗ ты скидываешь очень большой объем данных.
З.Ы. Сугубо ИМХО, вот если бы тебе пришлось обходом твоей ТЗ обработать не одну, а, например, 1500 записей, ИТЗ дало бы намного более лучший результат, так что каждый инструмент оптимален на своем месте.
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #4 - 24. Июня 2009 :: 11:00
Печать  
Странно, у меня поиск в ИТ практически мгновенно - гораздо быстрее ТЗ .
Правда вместо фильтра делаю НайтиБлижайшуюБольше.

P.S>
Если добавить колонку с Id Товара(Строка 9) и по ней строить индекс и поиск - ?

  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #5 - 24. Июня 2009 :: 13:09
Печать  
kiruha писал(а) 24. Июня 2009 :: 11:00:
Странно, у меня поиск в ИТ практически мгновенно - гораздо быстрее ТЗ .
Правда вместо фильтра делаю НайтиБлижайшуюБольше.

P.S>
Если добавить колонку с Id Товара(Строка 9) и по ней строить индекс и поиск - ?


У него индекс строится долго
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #6 - 24. Июня 2009 :: 13:13
Печать  
Salimbek писал(а) 24. Июня 2009 :: 13:09:
kiruha писал(а) 24. Июня 2009 :: 11:00:
Странно, у меня поиск в ИТ практически мгновенно - гораздо быстрее ТЗ .
Правда вместо фильтра делаю НайтиБлижайшуюБольше.

P.S>
Если добавить колонку с Id Товара(Строка 9) и по ней строить индекс и поиск - ?


У него индекс строится долго


Сейчас проверил отчет 4000 строк. Построение индекса с группированием 0.149 сек (со знаком * в индексе)

Вопрос автору - что значит долго в цифрах?
И какая операция в отладчике.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #7 - 24. Июня 2009 :: 13:18
Печать  
Изнасиловал ИТ около 30 000 строк. Много колонок.
Построение индекса и группирование 1.19 сек.
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #8 - 25. Июня 2009 :: 05:27
Печать  
Количество строк в ТЗ - 85000 (в тестовом месяце), число вхождений искомого товара 20
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #9 - 25. Июня 2009 :: 05:53
Печать  
dimm73 писал(а) 25. Июня 2009 :: 05:27:
Количество строк в ТЗ - 85000 (в тестовом месяце), число вхождений искомого товара 20

А что мешает строить запрос сразу по выбранному товару, не собирая все 85000 товаров?
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #10 - 25. Июня 2009 :: 06:07
Печать  
dimm73 писал(а) 25. Июня 2009 :: 05:27:
Количество строк в ТЗ - 85000 (в тестовом месяце), число вхождений искомого товара 20


Ну по идее поиск в ИТ должен быть быстрее в ТЗ примерно в 1000 раз.
А построение индекса не больше 2 сек (у меня машина 5 летней давности)

Видимо что то где то неправильно делаешь.

Добавь строковое поле с id, и поиск по нему для чистоты эксперимента
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #11 - 25. Июня 2009 :: 06:20
Печать  
Также можно по простой таблице искать значение по последней записи. Самый крайний случай и на нем сравнить.
Также надо отделить время формирования индекса от времени поиска по индексу.
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #12 - 25. Июня 2009 :: 08:33
Печать  
Salimbek писал(а) 25. Июня 2009 :: 05:53:
dimm73 писал(а) 25. Июня 2009 :: 05:27:
Количество строк в ТЗ - 85000 (в тестовом месяце), число вхождений искомого товара 20

А что мешает строить запрос сразу по выбранному товару, не собирая все 85000 товаров?



Товары нужны все, для последующей обработки.

А обработать выбранный товар прямо в запросе у меня не получилось, пришлось вы накладывать сразу несколько условий (если товар такой-то, если документОснование - такой)
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #13 - 25. Июня 2009 :: 08:34
Печать  
kiruha писал(а) 25. Июня 2009 :: 06:07:
dimm73 писал(а) 25. Июня 2009 :: 05:27:
Количество строк в ТЗ - 85000 (в тестовом месяце), число вхождений искомого товара 20


Ну по идее поиск в ИТ должен быть быстрее в ТЗ примерно в 1000 раз.
А построение индекса не больше 2 сек (у меня машина 5 летней давности)



Видимо что то где то неправильно делаешь.

Добавь строковое поле с id, и поиск по нему для чистоты эксперимента



Попробую попозже
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: долго  отрабатывает "ДобавитьИндекс"  так и должно быть?
Ответ #14 - 25. Июня 2009 :: 08:36
Печать  
Z1 писал(а) 25. Июня 2009 :: 06:20:
Также можно по простой таблице искать значение по последней записи. Самый крайний случай и на нем сравнить.
Также надо отделить время формирования индекса от времени поиска по индексу.


Я в отладчике замерял
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать