|
Скорость сортировки таблицы значений | ☑ | ||
---|---|---|---|---|
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
|
Это что это было сверху ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |