|
как правильно в Запросе? 🠗 (Волшебник 07.09.2022 12:43) | ☑ | ||
---|---|---|---|---|
0
DES
05.09.22
✎
15:56
|
с точки зрения быстродействия
ГДЕ Док.Проведен И Док.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) И КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ) или ГДЕ Док.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) И КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ) И Док.Проведен Проведен - точно индексируется в SQL и Дата - тоже? тогда без разницы? |
|||
1
Волшебник
05.09.22
✎
15:56
|
Отбор по периоду важнее
|
|||
2
grasshoper
07.09.22
✎
10:11
|
я всегда первыми ставлю условия отсекающие большую часть записей. понятное дело что в 98% случаев документ проведен, а в период он может не попасть.
|
|||
3
Kassern
07.09.22
✎
10:13
|
(0) правильнее ВиртуальнаяТаблцица(&НачалоПериода,&КонецПериода)
|
|||
4
RomaH
naïve
07.09.22
✎
10:30
|
И Док.Дата >= НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ)
И Док.Дата <= КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ) |
|||
5
НафНаф
07.09.22
✎
10:31
|
"Проведен - точно индексируется в SQL" - зачем индексировать булево значение?
|
|||
6
Святой Нос
07.09.22
✎
11:00
|
(2) > я всегда первыми ставлю условия
Ты хочешь сказать, что "Условие1 И Условие2" работает иначе, чем "Условие2 И Условие1" |
|||
7
Святой Нос
07.09.22
✎
11:01
|
?
|
|||
8
RomaH
naïve
07.09.22
✎
11:04
|
(6) а то - по И - если первое условие ложь, то второе не выполняется (не расчитывается)
|
|||
9
Святой Нос
07.09.22
✎
11:10
|
(8) А вот Microsoft почему-то пишет, что "The order of evaluation of logical operators can vary depending on choices made by the query optimizer" - https://docs.microsoft.com/ru-ru/sql/t-sql/queries/search-condition-transact-sql?view=sql-server-ver15
Как так-то? |
|||
10
DEVIce
07.09.22
✎
11:11
|
Я думаю что без разницы, скуль сам поставит поток как надо.
|
|||
11
Kassern
07.09.22
✎
11:12
|
(9) +1
SQL в общем случае - это декларативный язык. Вы говорите что хотите получить, но не говорите как. СУБД сама решает, как именно получать ваши данные. |
|||
12
RomaH
naïve
07.09.22
✎
11:13
|
странно
если я пишу так: Где А/0 > 0 И Ложь - в ошибку Где Ложь И А/0 > 0 - нет ошибки |
|||
13
Kassern
07.09.22
✎
11:15
|
(12) Попробуйте на большой таблице сделать отбор с парой условий "И", а потом поменяйте их местами и сравните время выполнения.
|
|||
14
Kassern
07.09.22
✎
11:15
|
все это проверяется за пару минут
|
|||
15
Святой Нос
07.09.22
✎
11:22
|
(12) Ты вообще не там воюешь.
ВЫБРАТЬ 10 КАК Поле1 ПОМЕСТИТЬ Времянка; ВЫБРАТЬ * ИЗ Времянка ГДЕ Поле1/0 > 0 И ЛОЖЬ; |
|||
16
Ryzeman
07.09.22
✎
11:24
|
(15) SQL умнеее программистов)
|
|||
17
RomaH
naïve
07.09.22
✎
15:08
|
(16) это только кажется
ВЫБРАТЬ 10 КАК Поле1 ПОМЕСТИТЬ втТаблица ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втТаблица.Поле1 КАК Поле1 ИЗ втТаблица КАК втТаблица ГДЕ ЛОЖЬ ИЛИ (втТаблица.Поле1 > 5 И 10 / (Поле1 - 5) > 0) //ИЛИ 10 / (Поле1 - 5) > 0 И (втТаблица.Поле1 > 5) |
|||
18
RomaH
naïve
07.09.22
✎
15:09
|
и я вполне сознательно пользуюсь таким поведением
если у меня бывают исключения в выражении, но я могу их исключить в первом условии - то вполне применительно |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |