|
Немного занятного о получении представлении ссылки | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
05.03.25
✎
16:07
|
Дня доброго.
Давненько тут не писал, но вот надо бы. Пилим мы тут своё и столкнулся я с тем, что чёт запрос по маркам подтормаживает на ровном месте. Начал разбирать и обнаружил вот такие пироги с котятами: Есть у нас справочник на 10000 элементов с одним реквизитом реквизит1, из которого берется представление в виде: Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) СтандартнаяОбработка=Ложь; Поля.Добавить("Реквизит1"); КонецПроцедуры И есть у нас простой запрос вида: ВЫБРАТЬ Справочник1.Представление КАК Представление ИЗ Справочник.Справочник1 КАК Справочник1 отловив его через профайлер, мы увидим понятную картинку: SELECT T1._Fld72 FROM dbo._Reference71 T1 но, поменяв вроде бы запрос на такой же: ВЫБРАТЬ ПРЕДСТАВЛЕНИЕ(Справочник1.Ссылка) КАК Представление ИЗ Справочник.Справочник1 КАК Справочник1 мы увидим вот такой запрос: SELECT T2._Fld72 FROM dbo._Reference71 T1 LEFT OUTER JOIN dbo._Reference71 T2 ON T1._IDRRef = T2._IDRRef на 10000 элементов это чувствоваться не будет, SQL просто прочитает таблицу, но на многомиллионных таблицах уже будут значительные просадки. Смысл этого левого соединения очевиден - функция ПРЕДСТАВЛЕНИЕ() может быть применена не к реквизиту Ссылка, а, например, к реквизиту "Автор" другого справочника, а 1С поленилась сделать исключение для реквизита Ссылка. Вот такие пироги на ровном месте бывают, я вот этого не знал. |
|||
1
mikecool
05.03.25
✎
13:45
|
(0) про ссылку в конце не понял
перечитал еще пару раз и дошло )) |
|||
2
mikecool
05.03.25
✎
13:35
|
+1 или реквизит1 - ссылочный тип?
|
|||
3
H A D G E H O G s
05.03.25
✎
13:39
|
(2) нет
|
|||
4
H A D G E H O G s
05.03.25
✎
13:43
|
(1)
Добавим в справочник реквизит Автор с типом Справочник.Пользователи. Выполним запрос ВЫБРАТЬ Справочник1.Ссылка, Представление(Справочник1.Автор), Представление(Справочник1.Ссылка) чтобы получить представление автора Представление(Справочник1.Автор) - нужно к основной таблице пристегнуть таблицу Справочник.Пользователи. чтобы получить представление ссылки Представление(Справочник1.Ссылка) - НЕ нужно к основной таблице пристегнуть таблицу Справочник.Справочник1. Но 1С-ники не стали заморачиваться по 2 пункту и запилили универсально. |
|||
5
Garykom
гуру
05.03.25
✎
13:43
|
(0) Теоретически СУБД должна такое сама разрулить
Просадок практически не будет, особенно с учетом левого и первичного ключа (который индексирован) |
|||
6
АНДР
05.03.25
✎
16:08
|
(0) Покажи планы запроса
SELECT T2._Fld72 FROM dbo._Reference71 T1 LEFT OUTER JOIN dbo._Reference71 T2 ON T1._IDRRef = T2._IDRRef |
|||
7
H A D G E H O G s
05.03.25
✎
14:29
|
(6) 2 indexscan и merge
|
|||
8
Волшебник
05.03.25
✎
18:24
|
(0) и эти же люди запрещают нам использовать несколько точек в запросе!...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |