|
Стоит ли менять Или на И в условиях запроса | ☑ | ||
---|---|---|---|---|
0
arancar
12.10.21
✎
11:43
|
В рамках задачи нужно было при подготовке данных для формируемого внешнего источника данных отчета сформировать таблицу, прокинув условия по необязательным параметрам формирования отчета, т.е. добавить к двум десяткам запросов по 3-5 условий вида
<code> &ИспользованиеФильтра И (ВТ.Поле1 = &Фильтр) Или Не &ИспользованиеФильтра </code> Раскладывать подобный запрос с учетом возможных сочетаний через объединения бессмысленно. Имеет ли смысл в подобных ситуациях играться с булевой алгеброй и заменять условие по "Или" через условие по "И" и "Не" <code> A или B = Не (Не А И Не B) </code> что с учетом сокращенного вычисления логических выражений сводит исходное условие к <code> Не (&ИспользованиеФильтра И Не ВТ.Поле1 = &Фильтр) </code> |
|||
1
Asmody
12.10.21
✎
11:47
|
Только профайлер тебе даст точный ответ на этот вопрос.
|
|||
2
ДенисЧ
12.10.21
✎
11:50
|
Имеет смысл в этом случае воспользоваться компоновкой или построителем запроса.
Или руками собирать текст запроса. А не извращаться с условиями. |
|||
3
pechkin
12.10.21
✎
11:54
|
Не &ИспользованиеФильтра ИЛИ ВТ.Поле1 = &Фильтр
|
|||
4
arancar
12.10.21
✎
12:01
|
(2) Спасибо, раньше с объектом Построитель не сталкивался, хотя и использовал Компановку данных внутри СКД отчетов. Похоже идеальное решение и значительно упростит читабельность кода самого запроса.
|
|||
5
ДенисЧ
12.10.21
✎
12:02
|
"Стаж: 7 лет 10 месяцев"
Я ухожу в афуй, извинте. |
|||
6
arancar
12.10.21
✎
12:04
|
(3) Основная задача - уйти от табуированного использования Или в условии запроса.
|
|||
7
acht
12.10.21
✎
12:05
|
(6) > табуированного
Кем и почему? |
|||
8
polosov
12.10.21
✎
12:07
|
(7) Он про ИЛИ в секции ГДЕ, наверное.
|
|||
9
acht
12.10.21
✎
12:08
|
(8) Да какая разница
Что плохого в конструкции (Поле1 = 1) ИЛИ (Поле1 = 2) ? |
|||
10
mikecool
12.10.21
✎
12:09
|
(9) иногда плохо, но надо смотреть планы запросов
|
|||
11
polosov
12.10.21
✎
12:09
|
(9) Ответ на ИТС есть. Такое рекомендуется заменять объединением запросов
|
|||
12
acht
12.10.21
✎
12:11
|
(10) К чорту ИТС, мне нужна конкретно твоя интрепретация.
И чем это условие отличается от Поле1 В (1, 2) ? |
|||
13
youalex
12.10.21
✎
12:11
|
(9) тем что его можно заменить на Поле1 В (1, 2)
) |
|||
14
acht
12.10.21
✎
12:11
|
(13) Нетарапись =)
|
|||
15
Малыш Джон
12.10.21
✎
12:12
|
(13) а в чем разница?
|
|||
16
youalex
12.10.21
✎
12:12
|
(14) не успел)
|
|||
17
Малыш Джон
12.10.21
✎
12:14
|
(9) вот интересно, а если заменить на
НЕ((Поле1 <> 1) И (Поле1 <> 2)) это улучшит ситуацию? |
|||
18
polosov
12.10.21
✎
12:15
|
(17) Если невозможно будет использовать индексы, то не улучшит.
|
|||
19
mikecool
12.10.21
✎
12:15
|
(12) согласен про ИТС, только хардкор!
|
|||
20
2mugik
12.10.21
✎
12:19
|
(0)Ставлю на черное) Если индексы есть МС СКЛ их найдет. А так имхо ответ в 1.
|
|||
21
pechkin
12.10.21
✎
12:19
|
условие на <> еще хуже чем или
|
|||
22
Малыш Джон
12.10.21
✎
12:20
|
(21) чем же?
|
|||
23
acht
12.10.21
✎
12:25
|
(19) Ну, есть надежда, что он сам ИТС откроет и прочитает.
Вторая надежда, что он попытается понять и третья - что сможет пересказать своими словами... |
|||
24
ДенисЧ
12.10.21
✎
12:33
|
Кому не нравится (по религиозным соображениям) ИТС, можете почитать вот это
http://rsdn.org/forum/db/8090508.flat#8090508 |
|||
25
ILM
модератор
12.10.21
✎
12:34
|
ВЫБОР используйте. Всегда когда есть куча условий в отчете, то мой выбор ВЫБОР.
|
|||
26
Малыш Джон
12.10.21
✎
13:15
|
(25) а ВЫБОР чем от ИЛИ отличается? В данном контексте.
|
|||
27
Конструктор1С
12.10.21
✎
13:45
|
НЕ Поле1 = &Значение1 - не будет использовать индекс
Поле1 <> &Значение1 - не будет использовать индекс Поле1 = &Значение1 ИЛИ Поле1 = &Значение2 Поле1 = &Значение3 - будет использовать индекс (с оговорками) |
|||
28
2mugik
12.10.21
✎
13:50
|
(24)rsdn это гуд. Я там про блокировки читал.
|
|||
29
ДенисЧ
12.10.21
✎
13:50
|
(28) Я в курсе, мне говорили. В смысле, я читал )))
|
|||
30
Конструктор1С
12.10.21
✎
14:00
|
(27) последнее условие читать так:
Поле1 = &Значение1 ИЛИ Поле1 = &Значение2 ИЛИ Поле1 = &Значение3 это аналог Поле1 В(&Значение1, &Значение2, &Значение3) |
|||
31
acanta
12.10.21
✎
14:02
|
А в случае Поле1 В(&Значение1, &Значение2, &Значение3) индекс используется?
|
|||
32
Eiffil123
12.10.21
✎
14:31
|
(0) если объем данных небольшой и скорость работы устраивает - не имеет никакого смысла. Заниматься оптимизацией нужно тогда и в тех местах, где это действительно нужно.
|
|||
33
polosov
12.10.21
✎
14:34
|
(32) А когда база встанет колом, то будет немного поздно.
|
|||
34
Eiffil123
12.10.21
✎
14:38
|
(33) а почему она должна встать колом? всегда же можно это планировать и этим управлять.
|
|||
35
Почему 1С
12.10.21
✎
14:40
|
(31) Зависит что планировщик решит, может использовать, а может и нет.
|
|||
36
acanta
12.10.21
✎
14:44
|
(34) Простите за грубость - аутизм лечится, а карьеризм нет. Планировать и управлять базой человеку неинтересно.
|
|||
37
polosov
12.10.21
✎
14:47
|
(34) Сегодня ты в базе ХХвП, а завтра ты уйдешь другую организацию говнокодить.
|
|||
38
Конструктор1С
12.10.21
✎
14:51
|
(31) используется, если это первое поле в индексе, или по более высоким полям индекса было фильтрануто на равно.
Допустим, есть регистр сведений с измерениями Контрагент, Товар, Акция. Все ссылки, идут в перечисленно порядке. Индекс отработает при отборах Контрагент = ... Товар = ... Акция В () Контрагент = ... Товар В () Контрагент В () |
|||
39
ДядяМитяй
12.10.21
✎
14:52
|
КОГДА &Фильтр = ЗНАЧЕНИЕ(Справочник.ИлиНеСправочникАЧтоТамУВас.ПустаяСсылка) ТОГДА Истина
ИНАЧЕ (ВТ.Поле1 = &Фильтр) |
|||
40
acanta
12.10.21
✎
15:03
|
(38) Спасибо. Смутно что-то помню про порядок измерений в регистрах типовых конфигураций. В регистре остатки товаров - партия, товар, склад. И получение остатков в форме списка справочника ТМЦ запросом. То есть индексировать регистр вообще смысла не имело.
|
|||
41
Eiffil123
12.10.21
✎
17:15
|
(37) ну уйдешь и далее что? из-за этого объем данных резко вырастет и запрос перестанет работать?
|
|||
42
polosov
12.10.21
✎
17:16
|
(41) Ты этого уже не узнаешь.
|
|||
43
Eiffil123
12.10.21
✎
17:23
|
(42) верно, не узнаешь
|
|||
44
Eiffil123
12.10.21
✎
17:24
|
можно подумать, вы пишете нетленки на века
|
|||
45
АнализДанных
12.10.21
✎
17:27
|
(4) Посмотри мое последнее сообщение в этой теме Как избежать рваного запроса Я там приложил процедуру с примером.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |