Имя: Пароль:
1C
1С v8
Скорость сортировки таблицы значений
0 Pasha_mix
 
26.03.12
11:01
Добрый день!
Недавно заметил что проведение документов стало слишком медлено выполянться.
Как выяснилось, это тормозит сортировка таблицы значений, в ней порядка 2500 строк и занимает это около 6-8 секунд.
Провел тест. Создал ТЗ на 5000 строк с 10 колонками, заполнил её простыми данными (строка и число) сортировка проходит моментом. Заполнил эту же таблицу ссылочными данными (спр. контрагенты и документ спсиание с расч. счёта.) Выполяняю сортировку по 2 столбцам (контрагент, ссылка), выполянется порядка 10-17 секунд...
Это можно как-то оптимизировать или принять как должное?
1 Maxus43
 
26.03.12
11:02
индексировать?
2 Maxus43
 
26.03.12
11:02
Запросом?
3 Kashemir
 
26.03.12
11:02
Если сортируешь одну и ту же таблицу - есть смысл сперва проиндексировать
4 Maxus43
 
26.03.12
11:03
проводи тесты... или в ТЗ добавляй колонку с примитивным типом, по которой можно отсортировать
5 Heckfy
 
26.03.12
11:03
Как ТЗ заполняется? Если запросом - делай сортировку в запросе.
6 Pasha_mix
 
26.03.12
11:05
Это типовой код 1С, при проведении Списание с расчетного счета.
Перед сортировкой таблицу лучше проиндексировать? А если она уже? Я просто сделал замер производительности, но код дальше не смотрел...
7 Kashemir
 
26.03.12
11:05
(0) Да и лучше саму таблицу типизировать изначально. Судя по описанию теста у тебя она вообще не типизирована.
8 Kashemir
 
26.03.12
11:06
(6) В типовых редко оптимизируют код - сомневаюсь что уже проиндексирована.
9 Pasha_mix
 
26.03.12
11:06
(7) Да, та что в тесте не типизирована. А вот та, что типовая ХЗ... Сейчас посмотрю )
10 МихаилМ
 
26.03.12
11:07
если колонки не типизированны,
сопоставление произходит через представление.

с далнешим сохранением в кэше.

те получем 5000 обращений к бд

+ ~ 5000* 5000 / 2 обращений к кэшу.
11 Fragster
 
гуру
26.03.12
11:07
а нафига там сортировать?
12 Pasha_mix
 
26.03.12
11:08
(10) Афигеть...
(11) Наверно надо, код типовой.
13 Fragster
 
гуру
26.03.12
11:09
(12) ну так надо понять, зачем и переписать по нормальному... сортировка ТЗ по ссылочным типам не есть гуд
14 Kashemir
 
26.03.12
11:10
(10) "сопоставление произходит через представление. "

Откуда дровишки ?
15 МихаилМ
 
26.03.12
11:12
(14)
люблю подсматривать за 1с
с помощью ms sql profiler
16 Kashemir
 
26.03.12
11:13
(15) Уже нашел и правда лажа

Тип: СравнениеЗначений. Объект для сравнения значений. Независимо от того, задан объект сравнения или нет, элементы, чьи типы не совпадают, сравниваются по коду типа, а элементы простых типов сравниваются по значению. Дополнительно к этому:
если объект сравнения не задан, то элементы остальных типов сравниваются по строковому представлению;
если объект сравнения задан, то:
объекты сравниваются по идентификатору;
моменты времени сравниваются по дате и идентификатору объекта;
элементы остальных типов сравниваются по строковому представлению.


Значит для запросов действуют другие правила, ибо там ссылочные типы сортируются по типу ссылки + ид ссылки.
17 orefkov
 
26.03.12
11:15
(15)
В богом забытой 7ке была вроде опция - сортировать ссылочные типы по внутреннему представлению. Сейчас нету?
18 Pasha_mix
 
26.03.12
11:16
А как индексировать ТЗ? )
19 Fragster
 
гуру
26.03.12
11:16
(17) а "если объект сравнения задан, то: объекты сравниваются по идентификатору;" это не то?
20 Kashemir
 
26.03.12
11:16
(15) Хотя смотри все же тут подтипы опять же по коду сперва сравниваются

1. "элементы, чьи типы не совпадают, сравниваются по коду типа". Это соответствует запросам.


2. "объекты сравниваются по идентификатору; " если здесь "объектом" подразумевается сам параметр то опять же на него действует правило
"объекты сравниваются по идентификатору; "

Таким образом представление не при чем.
21 Fragster
 
гуру
26.03.12
11:16
(18) в случае сортировки по представению оно не поможет
22 МихаилМ
 
26.03.12
11:17
(17)
сейчас (8.2)
- объект сравнение значений. не  очень странный
23 Fragster
 
гуру
26.03.12
11:17
(20) эксперимент показывает, что всё сортируется также, как при "автоупорядочивание" в запросе (на первый взгляд)
24 МихаилМ
 
26.03.12
11:18
(22)

хотел сказать - очень странный
25 acsent
 
26.03.12
11:18
смысл индексации ради одной сортировки? ибо индексация - это и есть сортировка записанная немного отдельно
26 Kashemir
 
26.03.12
11:19
(19) Да здесь есть возможность трактовать двояко:
- если объект имеется ввиду сам параметр "Тип: СравнениеЗначений. Объект для сравнения значений." то сортировка в пределах типа будет идти по идентификатору.
- если под объектом подразумевается объектное значение поля - то тогда "элементы остальных типов сравниваются по строковому представлению. "
27 МихаилМ
 
26.03.12
11:19
(23)
"автоупорядочивание" - известное зло.

впрочем как и сортировка разнотипных данных.
28 Kashemir
 
26.03.12
11:26
Я склоняюсь к тому что сортировка все же идет в рамках единой логики как для запросов, так и таблиц = тип + ид.

В (10) же к скулю платформа просто обращается за представлением полученных значений и это не касается самой логики сортировки
29 МихаилМ
 
26.03.12
11:41
(28)
проектирование ПО дисциплина точная
незачем  склоняться - проверте.
30 kiruha
 
26.03.12
11:44
(0)
Получай ТЗ с необходимыми данными для сортировки заранее - столбецы кодов/ наименований  и т.д.
31 kiruha
 
26.03.12
11:47
Представление, в учебниках любых
32 Kashemir
 
26.03.12
12:05
(29) Мда, действительно фигня с сортировкой по представлению получается.

Блок 1
AAAA;13f6acb1-7719-11e1-89f0-001c23dc04a2
BBBB;13f6acb2-7719-11e1-89f0-001c23dc04a2

Блок 2 (поменял представления местами)
AAAA;13f6acb2-7719-11e1-89f0-001c23dc04a2
BBBB;13f6acb1-7719-11e1-89f0-001c23dc04a2
33 Kashemir
 
26.03.12
12:07
(32) Вобщем надо использовать объект сравнения, если не хочется сортировок по представлению.
34 Kashemir
 
26.03.12
12:09
Вот результаты при заданном объекте сравнения значений

Блок 1 - АААА - BBBB
AAAA;13f6acb1-7719-11e1-89f0-001c23dc04a2
BBBB;13f6acb2-7719-11e1-89f0-001c23dc04a2

Блок 2 (поменял представления местами)  
BBBB;13f6acb1-7719-11e1-89f0-001c23dc04a2
AAAA;13f6acb2-7719-11e1-89f0-001c23dc04a2
35 orefkov
 
26.03.12
12:14
(34)
Скорость как?
36 Kashemir
 
26.03.12
12:26
(35)  10к записей, 2 типизированные колонки с простыми ссылочными
11 секунд по представлению, 0 с по коду.
37 Kashemir
 
26.03.12
12:27
Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10000
                  |    Номенклатура.Ссылка КАК Номенклатура,
                  |    Контрагенты.Ссылка КАК Контрагент
                  |ИЗ
                  |    Справочник.Номенклатура КАК Номенклатура
                  |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
                  |        ПО Номенклатура.ОсновнойПоставщик = Контрагенты.Ссылка";
   ТЗ = Запрос.Выполнить().Выгрузить();
   
   
   
   
   НачалоПредставления = ТекущаяДата();
   
   Сообщить(" Начало (по представлению)" + НачалоПредставления);
   ТЗ.Сортировать("Номенклатура Возр, Контрагент Возр");
   
   КонецПредставления = ТекущаяДата();
   Сообщить(" Конец (по представлению)/ начало по коду" + КонецПредставления + " разница (с): " + ( КонецПредставления - НачалоПредставления));
   
   СрЗн = Новый СравнениеЗначений;
   ТЗ.Сортировать("Номенклатура Возр, Контрагент Возр", СрЗн);
   НачалоПредставления = ТекущаяДата();
   Сообщить(" Конец  по коду" + НачалоПредставления + " разница (с): " + (НачалоПредставления - КонецПредставления));
38 kiruha
 
26.03.12
12:32
Это что это было сверху ?
AdBlock убивает бесплатный контент. 1Сергей