|
Как правильнее в запросе условия выборки регистратора? ВЫРАЗИТЬ или ССЫЛКА? | ☑ | ||||||
---|---|---|---|---|---|---|---|---|
0
arsik
гуру
01.11.18
✎
09:55
|
Как правильнее? Регистр сведений.
Вариант 1. CRM_ВзаимодействияСКлиентом.Регистратор ССЫЛКА Документ.CRM_ПредпринятоеДействие
Вариант 2. НЕ ВЫРАЗИТЬ(CRM_ВзаимодействияСКлиентом.Регистратор КАК Документ.CRM_ПредпринятоеДействие) ЕСТЬ NULL |
|||||||
1
FIXXXL
01.11.18
✎
09:56
|
так читабельнее
Вариант 1 |
|||||||
2
arsik
гуру
01.11.18
✎
09:57
|
(1) Да фиг с ней читабельностью. Как быстрее?
|
|||||||
3
Mankubus
01.11.18
✎
10:01
|
(2) сделай замер
|
|||||||
4
Cool_Profi
01.11.18
✎
10:17
|
Судя по пойманным запросам - таки первый.
Мне так кажется. Но это не точно. Вариант 1 |
|||||||
5
spiller26
01.11.18
✎
10:26
|
2 вариант не встречал ещё.
Вариант 1 |
|||||||
6
иубиповец
01.11.18
✎
10:28
|
А что прям кардинально время выполнения меняется?:)
Я всегда 1 вариантом пользовался. По логике в 1 варианте 1 действие - проверка на тип, а во втором 2, попытка преобразования в нужный тип, и проверка на null |
|||||||
7
spiller26
01.11.18
✎
10:29
|
||||||||
8
arsik
гуру
01.11.18
✎
10:29
|
(1) (4) (5)
Я тоже не встречал, но у меня вариант 2 работает быстрее первого, вот я и интересуюсь. |
|||||||
9
Cyberhawk
01.11.18
✎
10:30
|
(7) Так это не в условии во-первых, во-вторых не для составного типа
|
|||||||
10
Cyberhawk
01.11.18
✎
10:31
|
(8) Попробуй еще вариант 3: "НЕ" размести не в начале, а перед ЕСТЬ
|
|||||||
11
Cyberhawk
01.11.18
✎
10:31
|
А потом вариант 4: "НЕ" размести после "ЕСТЬ"
|
|||||||
12
SleepyHead
гуру
01.11.18
✎
10:49
|
ТипЗначения(Регистратор) = Тип(Документ.CRM_ПредпринятоеДействие)
пробовал? |
|||||||
13
arsik
гуру
01.11.18
✎
10:59
|
(11) Медленнее получается
(12) Еще медленнее (11) |
|||||||
14
Вафель
01.11.18
✎
11:01
|
сами запросы скл сравнивал?
|
|||||||
15
arsik
гуру
01.11.18
✎
11:02
|
(14) Неа. Пока нет доступа. Как комп нормальный поставят, локально сервер разверну тогда посмотрю конечно.
|
|||||||
16
Вафель
01.11.18
✎
11:07
|
а какая разница в замерах? может это просто пограшность?
|
|||||||
17
SleepyHead
гуру
01.11.18
✎
11:52
|
Если сравнить время на отладку и время исполнения запроса, умноженное на количество исполнений, что больше?
|
|||||||
18
Малыш Джон
01.11.18
✎
12:06
|
(0) ССЫЛКА проще, но она - только для ссылочных типов данных(как это не странно). Если в регистраторе будет Неопределено, то запрос в этом месте упадет.
|
|||||||
19
Малыш Джон
01.11.18
✎
12:08
|
И кстати второй вариант тоже с ошибкой падает для неопределено
|
|||||||
20
youalex
01.11.18
✎
12:13
|
(18) падает все же не по значению,а по типу поля.
3.Вариант 3. Явное соединение. |
|||||||
21
arsik
гуру
01.11.18
✎
13:36
|
(16) Возможно.
(18) В регистраторе не может быть "неопределено" |
|||||||
22
xXeNoNx
01.11.18
✎
13:52
|
(0) CRM_ВзаимодействияСКлиентом.Регистратор ССЫЛКА Документ.CRM_ПредпринятоеДействие
Пользуйтесь! Это быстрее |
|||||||
23
xXeNoNx
01.11.18
✎
14:03
|
вот факультативная ссцылочка, по п.2
https://www.mssqltips.com/sqlservertutorial/3203/avoid-using-not-equal-in-where-clause/ |
|||||||
24
Cyberhawk
01.11.18
✎
14:06
|
(13) А (10)?
|
|||||||
25
Cyberhawk
01.11.18
✎
14:07
|
(23) Спс
|
|||||||
26
arsik
гуру
01.11.18
✎
14:41
|
(23) Так не понял. ТО есть исходя из этого предложение "В" обрабатывается быстрее чем "<>" или "ИЛИ"
|
|||||||
27
Cyberhawk
01.11.18
✎
14:48
|
(26) Еще быстрее вместо "В" делать объединение с =, не?
|
|||||||
28
arsik
гуру
01.11.18
✎
14:49
|
Да, но слишком тяжелые для восприятия запросы получаются
|
|||||||
29
arsik
гуру
01.11.18
✎
14:49
|
+ (28) И если нужно что то изменить, приходится во всех объединениях это изменять
|
|||||||
30
xXeNoNx
01.11.18
✎
14:51
|
(28) Вам шашечки или ехать?
|
|||||||
31
Cyberhawk
01.11.18
✎
14:52
|
Хотя насчет замены "В" на объединение с = лениво смотреть, но по идее платформа прекрасно сама это должна делать?
|
|||||||
32
Cyberhawk
01.11.18
✎
14:52
|
Хотя не, походу не делает...
|
|||||||
33
VS-1976
01.11.18
✎
14:54
|
(0) Бредовый вопрос :)
Сравнение поля тип конечно же быстрее CRM_ВзаимодействияСКлиентом.Регистратор ССЫЛКА Документ.CRM_ПредпринятоеДействие Вариант ниже это как чесать язык через з@дницу НЕ ВЫРАЗИТЬ(CRM_ВзаимодействияСКлиентом.Регистратор КАК Документ.CRM_ПредпринятоеДействие) ЕСТЬ NULL |
|||||||
34
arsik
гуру
01.11.18
✎
15:57
|
(33) Ну видимо у меня погрешность все же. Т.к. "НЕ ВЫРАЗИТЬ(CRM_ВзаимодействияСКлиентом.Регистратор КАК Документ.CRM_ПредпринятоеДействие) ЕСТЬ NULL" - было быстрее.
Ну и не только я один юзаю сервер. |
|||||||
35
Вафель
01.11.18
✎
16:08
|
Поле ССЫЛКА .Тип
и Тип(Поле) = Тип в скл разварачиваются одинаково |
|||||||
36
Вафель
01.11.18
✎
16:09
|
выразить скорре всего вообще левое соединение будет. так что быстрее может быть только случайно
|
|||||||
37
arsik
гуру
01.11.18
✎
16:21
|
(36) Возможно ВЫРАЗИТЬ в условии будет влиять на получение полей запроса. Хотя там при получении полей у меня все тоже через ВЫРАЗИТЬ.
|
|||||||
38
Вафель
01.11.18
✎
16:22
|
(37) проще самому соединение написать, чем 500 раз выразить
|
|||||||
39
VS-1976
01.11.18
✎
21:55
|
(36) Не будет там левое... Если бы точку поставил тогда да...
Выразить это типа приведение типа :) так кроме этого сравнение на null и ещё инверсия результата. Действий больше, чем просто проверка поля тип на цЫфирь, которую в запрос подставит 1с... |
|||||||
40
VS-1976
01.11.18
✎
21:57
|
(34) что бы мерить нужно код определенно строить. Выносить запрос в общий, что бы он один раз парился и вызывать в цикле уже отпарсенный, что бы тест был корректным...
|
|||||||
41
VS-1976
01.11.18
✎
21:58
|
(40) вместо парился читать парсился
|
|||||||
42
Bober
01.11.18
✎
22:59
|
(0)
первый вариант - будет сравнение по полу Тип данных, на больших выборках свалится в сканирование таблицы. второй вариант - 100% будет полное сканирование таблицы, так как будет CASE when .... |
|||||||
43
arsik
гуру
02.11.18
✎
09:43
|
Еще вопрос тогда.
Я вижу что вот такие условия в запросе у меня оптимизатор неверно обрабатывает. (8.2.19) ВЫБРАТЬ
Переписал все на конструировании запроса. Сейчас быстрее но сложнее дорабатывать. т.к. запрос собирается из нескольких частей и условий. Это норма или что то уже изменили в новых платформах? |
|||||||
44
Cyberhawk
02.11.18
✎
09:45
|
(43) Вместо кейсов объединение лупить - это норма
|
|||||||
45
Cyberhawk
02.11.18
✎
09:46
|
А вот латиница в "cgВидНоменклатуры" - это не норма )
|
|||||||
46
arsik
гуру
02.11.18
✎
10:01
|
(45) Это просто для примера делал, там "спВидНоменклатуры"
|
|||||||
47
DrWatson
02.11.18
✎
10:04
|
(43) Чтобы не собирать запрос из несколько частей можно вставить все эти условия в запрос закомментированными, а потом один раз СтрЗаменить(ТекстЗапроса, "//ОтборНоменклатура", "")
|
|||||||
48
arsik
гуру
02.11.18
✎
10:55
|
(47) Вариант. Но конструктор запросов выкинет комментарии.
|
|||||||
49
Alexandr_U1982
02.11.18
✎
11:51
|
(48)Чтобы конструктор не выкидывал, можно ставить не "ОтборНоменклатура", а "&ОтборНоменклатура".
А потом СтрЗаменить(ТекстЗапроса, "&ОтборНоменклатура", ""). |
|||||||
50
Alexandr_U1982
02.11.18
✎
11:53
|
(48)Чтобы конструктор не выкидывал, можно ставить не "//ОтборНоменклатура", а "&ОтборНоменклатура".
А потом СтрЗаменить(ТекстЗапроса, "&ОтборНоменклатура", ""). |
|||||||
51
Вафель
02.11.18
✎
11:53
|
(43) Может проще параметр заполнять, а не текст менять?
|
|||||||
52
arsik
гуру
02.11.18
✎
11:55
|
(51) А что это даст? Оптимизатор неверно прожует это условие.
|
|||||||
53
Вафель
02.11.18
✎
11:58
|
Я предлагая всегда писать "В", а параметр либо список либо элемент
|
|||||||
54
DrWatson
02.11.18
✎
13:18
|
(48) Да, выкинет. Да, дорабатывать всё же сложнее чем в (43). Но! Так у тебя текст запроса не разбит на несколько кусков с кучей Если посередине (в общем случае). Наглядность такого запроса выше, его уже глазами можно читать.
Плюс при таком подходе конструктор запросов хоть открывается и можно посмотреть всё остальное. К тому же при точечных доработках всегда приходится добавлять кусочки запроса и комментарии. Т.е. в любом случае сделал текст конструктором, скопировал что надо, откатил текст, вставил только свой кусочек, не меняя форматирования всего запроса. При таком подходе все эти комментарии нормально живут. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |