Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Как правильнее в запросе условия выборки регистратора? ВЫРАЗИТЬ или ССЫЛКА?

Как правильнее в запросе условия выборки регистратора? ВЫРАЗИТЬ или ССЫЛКА?
Я
   arsik
 
01.11.18 - 09:55
1. Вариант 1100% (3)
2. Вариант 20% (0)
Всего мнений: 3

Как правильнее? Регистр сведений.
Вариант 1.
CRM_ВзаимодействияСКлиентом.Регистратор ССЫЛКА Документ.CRM_ПредпринятоеДействие

Вариант 2.
НЕ ВЫРАЗИТЬ(CRM_ВзаимодействияСКлиентом.Регистратор КАК Документ.CRM_ПредпринятоеДействие) ЕСТЬ NULL

 
 
   FIXXXL
 
1 - 01.11.18 - 09:56
так читабельнее

1. Вариант 1
   arsik
 
2 - 01.11.18 - 09:57
(1) Да фиг с ней читабельностью. Как быстрее?
   Mankubus
 
3 - 01.11.18 - 10:01
(2) сделай замер
   Cool_Profi
 
4 - 01.11.18 - 10:17
Судя по пойманным запросам - таки первый.
Мне так кажется.
Но это не точно.

1. Вариант 1
   spiller26
 
5 - 01.11.18 - 10:26
2 вариант не встречал ещё.

1. Вариант 1
   иубиповец
 
6 - 01.11.18 - 10:28
А что прям кардинально время выполнения меняется?:)
Я всегда 1 вариантом пользовался. По логике в 1 варианте 1 действие - проверка на тип, а во втором 2, попытка преобразования в нужный тип, и проверка на null
   spiller26
 
7 - 01.11.18 - 10:29
   arsik
 
8 - 01.11.18 - 10:29
(1) (4) (5)
Я тоже не встречал, но у меня вариант 2 работает быстрее первого, вот я и интересуюсь.
   Cyberhawk
 
9 - 01.11.18 - 10:30
(7) Так это не в условии во-первых, во-вторых не для составного типа
   Cyberhawk
 
10 - 01.11.18 - 10:31
(8) Попробуй еще вариант 3: "НЕ" размести не в начале, а перед ЕСТЬ
 
 Рекламное место пустует
   Cyberhawk
 
11 - 01.11.18 - 10:31
А потом вариант 4: "НЕ" размести после "ЕСТЬ"
   SleepyHead
 
12 - 01.11.18 - 10:49
ТипЗначения(Регистратор) = Тип(Документ.CRM_ПредпринятоеДействие)

пробовал?
   arsik
 
13 - 01.11.18 - 10:59
(11) Медленнее получается
(12) Еще медленнее (11)
   Вафель
 
14 - 01.11.18 - 11:01
сами запросы скл сравнивал?
   arsik
 
15 - 01.11.18 - 11:02
(14) Неа. Пока нет доступа. Как комп нормальный поставят, локально сервер разверну тогда посмотрю конечно.
   Вафель
 
16 - 01.11.18 - 11:07
а какая разница в замерах? может это просто пограшность?
   SleepyHead
 
17 - 01.11.18 - 11:52
Если сравнить время на отладку и время исполнения запроса,  умноженное на количество исполнений, что больше?
   Малыш Джон
 
18 - 01.11.18 - 12:06
(0) ССЫЛКА проще, но она - только для ссылочных типов данных(как это не странно). Если в регистраторе будет Неопределено, то запрос в этом месте упадет.
   Малыш Джон
 
19 - 01.11.18 - 12:08
И кстати второй вариант тоже с ошибкой падает для неопределено
   youalex
 
20 - 01.11.18 - 12:13
(18) падает все же не по значению,а по типу поля.

3.Вариант 3. Явное соединение.
   arsik
 
21 - 01.11.18 - 13:36
(16) Возможно.
(18) В регистраторе не может быть "неопределено"
   xXeNoNx
 
22 - 01.11.18 - 13:52
(0) CRM_ВзаимодействияСКлиентом.Регистратор ССЫЛКА Документ.CRM_ПредпринятоеДействие

Пользуйтесь!
Это быстрее
   xXeNoNx
 
23 - 01.11.18 - 14:03
вот факультативная ссцылочка, по п.2
https://www.mssqltips.com/sqlservertutorial/3203/avoid-using-not-equal-in-where-clause/
   Cyberhawk
 
24 - 01.11.18 - 14:06
(13) А (10)?
   Cyberhawk
 
25 - 01.11.18 - 14:07
(23) Спс
   arsik
 
26 - 01.11.18 - 14:41
(23) Так не понял. ТО есть исходя из этого предложение "В" обрабатывается быстрее чем "<>" или "ИЛИ"
   Cyberhawk
 
27 - 01.11.18 - 14:48
(26) Еще быстрее вместо "В" делать объединение с =, не?
   arsik
 
28 - 01.11.18 - 14:49
Да, но слишком тяжелые для восприятия запросы получаются
   arsik
 
29 - 01.11.18 - 14:49
+ (28)  И если нужно что то изменить, приходится во всех объединениях это изменять
   xXeNoNx
 
30 - 01.11.18 - 14:51
(28) Вам шашечки или ехать?
   Cyberhawk
 
31 - 01.11.18 - 14:52
Хотя насчет замены "В" на объединение с = лениво смотреть, но по идее платформа прекрасно сама это должна делать?
   Cyberhawk
 
32 - 01.11.18 - 14:52
Хотя не, походу не делает...
   VS-1976
 
33 - 01.11.18 - 14:54
(0) Бредовый вопрос :)
Сравнение поля тип конечно же быстрее

CRM_ВзаимодействияСКлиентом.Регистратор ССЫЛКА Документ.CRM_ПредпринятоеДействие

Вариант ниже это как чесать язык через з@дницу

НЕ ВЫРАЗИТЬ(CRM_ВзаимодействияСКлиентом.Регистратор КАК Документ.CRM_ПредпринятоеДействие) ЕСТЬ NULL
 
 
   arsik
 
34 - 01.11.18 - 15:57
(33) Ну видимо у меня погрешность все же. Т.к.  "НЕ ВЫРАЗИТЬ(CRM_ВзаимодействияСКлиентом.Регистратор КАК Документ.CRM_ПредпринятоеДействие) ЕСТЬ NULL" - было быстрее.
Ну и не только я один юзаю сервер.
   Вафель
 
35 - 01.11.18 - 16:08
Поле ССЫЛКА .Тип
и
Тип(Поле) = Тип
в скл разварачиваются одинаково
   Вафель
 
36 - 01.11.18 - 16:09
выразить скорре всего вообще левое соединение будет. так что быстрее может быть только случайно
   arsik
 
37 - 01.11.18 - 16:21
(36) Возможно ВЫРАЗИТЬ в условии будет влиять на получение полей запроса. Хотя там при получении полей у меня все тоже через ВЫРАЗИТЬ.
   Вафель
 
38 - 01.11.18 - 16:22
(37) проще самому соединение написать, чем 500 раз выразить
   VS-1976
 
39 - 01.11.18 - 21:55
(36) Не будет там левое... Если бы точку поставил тогда да...
Выразить это типа приведение типа :) так кроме этого сравнение на null и ещё инверсия результата. Действий больше, чем просто проверка поля тип на цЫфирь, которую в запрос подставит 1с...
   VS-1976
 
40 - 01.11.18 - 21:57
(34) что бы мерить нужно код определенно строить. Выносить запрос в общий, что бы он один раз парился и вызывать в цикле уже отпарсенный, что бы тест был корректным...
   VS-1976
 
41 - 01.11.18 - 21:58
(40) вместо парился читать парсился
   Bober
 
42 - 01.11.18 - 22:59
(0)
первый вариант - будет сравнение по полу Тип данных, на больших выборках свалится в сканирование таблицы.
второй вариант - 100% будет полное сканирование таблицы, так как будет CASE when ....
   arsik
 
43 - 02.11.18 - 09:43
Еще вопрос тогда.
Я вижу что вот такие условия в запросе у меня оптимизатор неверно обрабатывает. (8.2.19)
ВЫБРАТЬ
    Номенклатура.Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    ВЫБОР
            КОГДА &Фильтр = "ТипНоменклатуры"
                ТОГДА Номенклатура.ТипНоменклатуры = &ТипНоменклатуры
            КОГДА &Фильтр = "спТипНоменклатуры"
                ТОГДА Номенклатура.ТипНоменклатуры В (&спТипНоменклатуры)
            КОГДА &Фильтр = "ВидНоменклатуры"
                ТОГДА Номенклатура.ВидНоменклатуры = &ВидНоменклатуры
            КОГДА &Фильтр = "cgВидНоменклатуры"
                ТОГДА Номенклатура.ВидНоменклатуры В (&спВидНоменклатуры)
            ИНАЧЕ ИСТИНА
        КОНЕЦ

Переписал все на конструировании запроса. Сейчас быстрее но сложнее дорабатывать. т.к. запрос собирается из нескольких частей и условий.
Это норма или что то уже изменили в новых платформах?
   Cyberhawk
 
44 - 02.11.18 - 09:45
(43) Вместо кейсов объединение лупить - это норма
   Cyberhawk
 
45 - 02.11.18 - 09:46
А вот латиница в "cgВидНоменклатуры" - это не норма )
   arsik
 
46 - 02.11.18 - 10:01
(45) Это просто для примера делал, там "спВидНоменклатуры"
   DrWatson
 
47 - 02.11.18 - 10:04
(43) Чтобы не собирать запрос из несколько частей можно вставить все эти условия в запрос закомментированными, а потом один раз СтрЗаменить(ТекстЗапроса, "//ОтборНоменклатура", "")
   arsik
 
48 - 02.11.18 - 10:55
(47) Вариант. Но конструктор запросов выкинет комментарии.
   Alexandr_U1982
 
49 - 02.11.18 - 11:51
(48)Чтобы конструктор не выкидывал, можно ставить не "ОтборНоменклатура", а "&ОтборНоменклатура".
А потом СтрЗаменить(ТекстЗапроса, "&ОтборНоменклатура", "").
 
 Рекламное место пустует
   Alexandr_U1982
 
50 - 02.11.18 - 11:53
(48)Чтобы конструктор не выкидывал, можно ставить не "//ОтборНоменклатура", а "&ОтборНоменклатура".
А потом СтрЗаменить(ТекстЗапроса, "&ОтборНоменклатура", "").
   Вафель
 
51 - 02.11.18 - 11:53
(43) Может проще параметр заполнять, а не текст менять?
   arsik
 
52 - 02.11.18 - 11:55
(51) А что это даст? Оптимизатор неверно прожует это условие.
   Вафель
 
53 - 02.11.18 - 11:58
Я предлагая всегда писать "В", а параметр либо список либо элемент
   DrWatson
 
54 - 02.11.18 - 13:18
(48) Да, выкинет. Да, дорабатывать всё же сложнее чем в (43). Но! Так у тебя текст запроса не разбит на несколько кусков с кучей Если посередине (в общем случае). Наглядность такого запроса выше, его уже глазами можно читать.
Плюс при таком подходе конструктор запросов хоть открывается и можно посмотреть всё остальное. К тому же при точечных доработках всегда приходится добавлять кусочки запроса и комментарии. Т.е. в любом случае сделал текст конструктором, скопировал что надо, откатил текст, вставил только свой кусочек, не меняя форматирования всего запроса. При таком подходе все эти комментарии нормально живут.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует