Переключение на Главную Страницу Страницы: [1] 2 3 ... 10 ОтправитьПечать
Очень популярная тема (более 25 ответов) к вопросу быстродействия индексированных таблиц. (число прочтений - 52096 )
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
к вопросу быстродействия индексированных таблиц.
27. Января 2007 :: 10:34
Печать  
Привет всем! Жаль что с Itland'a статус не перенесешь. Смущённый
Код
Выбрать все
Тз=СоздатьОбъект("ТаблицаЗначений");
Тз.Новаяколонка("Товар");
Тз.Новаяколонка("Что-то там");

Тз......  Наполнить();

Тз.Сортировать("Товар");

ТочкаОтсчета=ТекущееВремя();

Пока условиеБОЛЬШОГОцикла Цикл
  стр="";
  Если Тз.НайтиЗначение(Товар,стр,"товар")=1 Тогда
 	   Для ё=стр по Тз.КоличествоСтрок() Цикл
	Тз.ПолучитьСтрокуПоНомеру(ё);
   	   Если Тз.Товар<>Товар Тогда
	       Прервать;
	  Конецесли;

	    ЧегоТоДелаем();

	  КонецЦикла;
  КонецЕсли;
КонецЦикла;

Закончилирасчет=ТекущееВремя();

 



Результат, к примеру 10 сек ( в зависимости от данных)

Код
Выбрать все
Тз=СоздатьОбъект("ИндексированнаяТаблица");
Тз.Новаяколонка("Товар");
Тз.Новаяколонка("Что-то там");

Тз.ДобавитьИндекс("индТовар","*Товар");

Тз......  Наполнить();


ТочкаОтсчета=ТекущееВремя();

Пока условиеБОЛЬШОГОцикла Цикл
	 Тз.УстановитьФильтр(Товар,Товар,"индТовар");
	 Тз.ВыбратьСтроки();
	   Пока Тз.ПолучитьСтроку()=1 Цикл

   		 ЧегоТоДелаем();

	   КонецЦикла;
КонецЦикла;

 



Результат  Круглые глаза - за день не дождался.

Может что делаю не так?

PS
Код, во втором случае, не "виснет" - проверял на малом объеме данных.
Долго, но проходит.
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: к вопросу быстродействия индексированных табли
Ответ #1 - 27. Января 2007 :: 10:47
Печать  
1. Добавлять индекс лучше _после_ заполнения ТЗ.
2. Фильтр ставится по индексу "индТовар", но выборка потом идет по _всей_ таблице
вероятно имелось в виду что-то типа
Код
Выбрать все
	 Тз.УстановитьФильтр(Товар,Товар,"индТовар");
	 Тз.ВыбратьСтроки("индТовар");
	 Пока Тз.ПолучитьСтроку("индТовар")=1 Цикл
 



+
3. Индексы по представлению (без префикса *) - медленные, по внутр. представлению - быстрые.
Особенно заметно на базах SQL.
Так что для отбора применен правильный индекс.


по использованию метода сортировать - удалено
  

De quelle planète es-tu?
Наверх
 
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #2 - 27. Января 2007 :: 10:49
Печать  

Ошибка похоже - здесь
Тз.ВыбратьСтроки("индТовар");

Рекомендую в документации уточнить,
что метод УстановитьФильтр()
влияет на ВыбратьСтроки(),...  , в случае указания в параметрах индекса.

Проверил документацию
Синтаксис: ВыбратьСтроки([Индекс = ""], [флТолькоУникальные = 0])

Не понятно, когда указывать индекс.

А если указать индекс без установленного фильтра - отбор произведен будет ?
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: к вопросу быстродействия индексированных табли
Ответ #3 - 27. Января 2007 :: 10:55
Печать  
vlf писал(а) 27. Января 2007 :: 10:49:
Рекомендую в документации уточнить,

Рекомендуй, да услышат тебя.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #4 - 27. Января 2007 :: 11:51
Печать  
vlf писал(а) 27. Января 2007 :: 10:49:
Ошибка похоже - здесь
Тз.ВыбратьСтроки("индТовар");

Проблему решил?
Ускорение должно быть приличное по сравнению с обычной ТЗ
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: к вопросу быстродействия индексированных табли
Ответ #5 - 27. Января 2007 :: 12:05
Печать  
Артур, да х#р с ним, с быстродействием.

Я неделю думаю над высказываниями Кости и все больше убеждаюсь в его правоте.
Kostya писал(а) 22. Января 2007 :: 19:44:
В общем у меня только одна мысль. Популяризация это все фигня.
Реально человека волнует только он сам. Внес он в класс половину запятой и все.
Теперь он обречен им пользоваться. А уж если внес три строки - ваще капец.
А если приносят ему тонну строк и там даже его запятой нету то нах оно ему надо.
В библиотках пылятся тонны умных мыслей очень умных людей. Очень известных и тем
не менее нафиг никому не нужных. Почему тебя волнует класс индексированная таблица ?
потому что ты его писал. Почему он меня не волует ? (да я даже не знаю что такое существует и зачем существует), потому что ты не попросил меня
написать для нее всего один метод. Я потому думаю что и документация это все фигня.
Когда чел залез сам в сорцы и все методы подглядел он же их теперь _помнить_ наизусть будет. Нафиг ему дока. Раньше помню никаких книг в книжных не продавалось. НУ ВАЩЕ НИКАКИХ по компам. ЗА ПИВО покупали доки к ТурбоАссемблеру на дискетах. Ну и че ?
Я ассемблер до сих пор не забыл. И могу написать слету какой нибудь TSR или полиморфный движок. Другое дело - что это мне щаз нафиг не надо.
А потом как книг много появилось так что читать их стали ? НИФИГА НЕ СТАЛИ. Идиотов стало на порядок больше. несмотря на все книги и доки. Мысли простые : если это так легко дается - нафиг это ценить.  так что моя формула простая - не надо лохматить бабушку, давайте просто ваять код вместе, а бабки получать за него отдельно.

Разве не гениально сказано?

Так что мое мнение по вопросу документации: нах#р, нах#р излишние подробности.
Должно быть описано просто, четко и по делу.

А если кто-то чего-то в первый день изучения не понял - ну что ж делать, это бывает.
Для этого и существуют форумы, помощь сообщества и собственный опыт.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #6 - 29. Января 2007 :: 06:55
Печать  
Давайте в курилке все эти вопросы обсудим.
Там сейчас открою тему.
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #7 - 29. Января 2007 :: 07:30
Печать  
vlf писал(а) 27. Января 2007 :: 10:49:
Рекомендую в документации уточнить,
что метод УстановитьФильтр()
влияет на ВыбратьСтроки(),...  , в случае указания в параметрах индекса.

Проверил документацию
Синтаксис: ВыбратьСтроки([Индекс = ""], [флТолькоУникальные = 0])

Не понятно, когда указывать индекс.

А если указать индекс без установленного фильтра - отбор произведен будет ?

В самом начале документации есть такой текст
Цитата:
Таблица всегда имеет 1 индекс (в дальнейшем будем называть его "основной индекс"), который нельзя удалить.
Номер этого индекса - 1, имя - "" (пустая строка). Если в операциях, использующих индекс, не
указано имя индекса, то используется основной индекс. При операциях перепозиционирования
(ВНачало(), СледующаяСтрока(), ПредыдущаяСтрока() и т.д.)  основной индекс позиционируется на ту же строку.

Это - фундаментальное свойство ИТ, поэтому я его и вынес в нулевой такскать раздел. В ИТ вообще все операции делаются с оглядкой на индекс. Другое дело, что индекс может не указываться явно.

Возможно, вышеприведённый текст фигово сформулирован, и из него не понятно, что ничто в ИТ не происходит без индекса.  Здесь имеет место самая обыкновенная засада, когда документацию пишет непосредственный разработчик. Мне то всё понятно и безо всяких объяснений, поэтому объяснения получаются непонятными.
  
Наверх
 
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #8 - 29. Января 2007 :: 07:38
Печать  
Бог с ней с документацией. Не писал я последние несколько месяцев. Вот и отстал с особенностями.
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #9 - 29. Января 2007 :: 07:51
Печать  
vlf писал(а) 29. Января 2007 :: 07:38:
Бог с ней с документацией. Не писал я последние несколько месяцев. Вот и отстал с особенностями.

Не, ну что значит "бог с ней"?  Если документация фиговая - так надо сделать её нормальной. Для чего и существуют форумы и разные другие способы общения. Вот ты предложил поправку. Вот я сказал, что это не совсем то. И что, на этом всё? Ты разобрался, тебе стало неинтересно, и на этом всё? Вот так оно и происходит, блин... И сами разработчики не занимаются популяризацией по той же самой причине - им и так всё ясно, и лень...

И чем заводить заведомо ни к чему кроме флейма не ведущие ветки ( http://www.1cpp.ru/forum/YaBB.pl?num=1170055950 ), придумал бы лучше такую поправку к документации, которая внесёт необходимую ясность.
  
Наверх
 
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #10 - 29. Января 2007 :: 07:52
Печать  
Цитата:
Таблица всегда имеет 1 индекс (в дальнейшем будем называть его "основной индекс"), который нельзя удалить.
Номер этого индекса - 1, имя - "" (пустая строка). Если в операциях, использующих индекс, не
указано имя индекса, то используется основной индекс. При операциях перепозиционирования
(ВНачало(), СледующаяСтрока(), ПредыдущаяСтрока() и т.д.) основной индекс позиционируется на ту же строку.


Функция УстановитьФильтр() может влиять только на индекс, а может влиять на весь объект.
В первом случае все понятно, и это наверное соответствует существующим стандартам, например DBase системам.
Во втором случае ( а я мало писал на Foxpro) возникает этот вопрос.
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #11 - 29. Января 2007 :: 07:55
Печать  
Цитата:
Для чего и существуют форумы и разные другие способы общения. Вот ты предложил поправку. Вот я сказал, что это не совсем то. И что, на этом всё? Ты разобрался, тебе стало неинтересно, и на этом всё? Вот так оно и происходит, блин... И сами разработчики не занимаются популяризацией по той же самой причине - им и так всё ясно, и лень...

И чем заводить заведомо ни к чему кроме флейма не ведущие ветки ( http://www.1cpp.ru/forum/YaBB.pl?num=1170055950 ), придумал бы лучше такую поправку к документации, которая внесёт необходимую ясность.


Что бы этот пост поместить там.
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #12 - 29. Января 2007 :: 08:01
Печать  
Цитата:
Функция УстановитьФильтр() может влиять только на индекс, а может влиять на весь объект.
В первом случае все понятно, и это наверное соответствует существующим стандартам, например DBase системам.
Во втором случае ( а я мало писал на Foxpro) возникает этот вопрос.
Нет, операция УстановитьФильтр() всегда влияет только на индекс. Другой вопрос, что этот индекс м.б. служебным - т.е. индекс с именем "" (пустая строка) и номером 1.  Вообще все методы, в которых есть параметр Индекс ведут себя именно таким способом.
  
Наверх
 
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #13 - 29. Января 2007 :: 08:09
Печать  
вход -> BlackBox -> выход

индекс -> установитьФильтр() ->(индекс OR ИТЗ)

Цитата:
Описание: устанавливает динамический фильтр на таблицу по указанному индексу.


Из документации следует ИТЗ.

« Последняя редакция: 29. Января 2007 :: 09:15 - vlf »  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #14 - 29. Января 2007 :: 08:20
Печать  
Предложение
Описание: устанавливает динамический фильтр для указанного индекса. Влияет на ..... , использующие указанный индекс
  

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