|
Порядок условий в запросе | ☑ | ||
---|---|---|---|---|
0
DrLivsey
16.11.11
✎
16:57
|
Запрос по документам, условия по нескольким полям и по Проведен.
Имеет ли смысл поиграться порядком условий в запросе для оптимизации оного? Или парсер запроса сам всё отработает? |
|||
1
Лефмихалыч
16.11.11
✎
17:02
|
(0) условия вычисляются в том порядке, в котором они написаны. Имеет смысл
|
|||
2
Maxus43
16.11.11
✎
17:03
|
вперёд по Проведён, потом остальное
|
|||
3
acsent
16.11.11
✎
17:03
|
Еще важно чтобы они в одну строку были, выигрыш 5%
|
|||
4
Ахиллес
16.11.11
✎
17:03
|
(2) Обоснуй.
|
|||
5
acsent
16.11.11
✎
17:06
|
запрос с фильтром только по дате работает быстрее чем с фильтром по дате и проведен
|
|||
6
Maxus43
16.11.11
✎
17:08
|
чтоб у непрведенных реквизиты не проверять сразу.
Что логичней и быстрей? "Проверяем реквизиты и если проведён то норм" или "если проведён то проверяем реквизиты". я правда ХЗ такая логика в языке запросов работает или нет. |
|||
7
Ахиллес
16.11.11
✎
17:11
|
На самом деле большинство документов в базе проведённые, поэтому условие по "Проведён" можно смело ставить на последнее место.
(6) В базе 1000 документов, 500 по 1 организации и 500 по второй . 999 проведено и 1 не проведён. Да мне пофигу отберёт запрос сначала 999 документов или 1000. А вот если первым я поставлю условие по "Организации", тогда второе условие будет проверятся уже только у половины документов. |
|||
8
DrLivsey
16.11.11
✎
17:13
|
(2) классики говорят ставить первым то условие, которое вернет минимум документов, поэтому условие на Проведен последним хочется.
|
|||
9
andrewks
16.11.11
✎
17:13
|
тут на статистику документооборота смотреть надо.
и ставить в начало те условия, которые будут отсеивать максимальное количество строк |
|||
10
Maxus43
16.11.11
✎
17:13
|
(7) от реквизитов зависит и от проведённх. если там 999 непроведено? а вобще - не то место это где за производительность надо бороться имхо
|
|||
11
Maxus43
16.11.11
✎
17:14
|
(8) согласен
|
|||
12
Ахиллес
16.11.11
✎
17:15
|
(11) Ну дык, я те то же самое написал.
|
|||
13
Лефмихалыч
16.11.11
✎
17:16
|
(5) это вранье. Только что проверил
|
|||
14
Ненавижу 1С
гуру
16.11.11
✎
17:16
|
(1) пруфссылку
|
|||
15
Maxus43
16.11.11
✎
17:17
|
(12) ну дык, вечер уже:)
|
|||
16
Fragster
гуру
16.11.11
✎
17:17
|
(14)+100500, причем на разных СУБД ;)
|
|||
17
Maxus43
16.11.11
✎
17:18
|
(13) тогда смысла в сабже нет, если 2 условия выполняются столько-же времени что и одно
|
|||
18
Лефмихалыч
16.11.11
✎
17:19
|
(14), (16) зануды
|
|||
19
Maxus43
16.11.11
✎
17:19
|
в СП написано как условия во встроенном языке работают. в нём да, имеет значение точно, часть условий может просто не проверяться. что касается запросов то это к СУБД надо
|
|||
20
acsent
16.11.11
✎
17:19
|
(13) Криво проверял значит. По дате есть индекс, а по полю проведен нет
|
|||
21
Лефмихалыч
16.11.11
✎
17:20
|
(17) два условия выполняются быстрее, чем одно
|
|||
22
acsent
16.11.11
✎
17:20
|
(19) Где написано????
|
|||
23
Лефмихалыч
16.11.11
✎
17:20
|
(20) нормально проверял - с разными значениями Проведен. И так, и эдак быстрее работает два условия
|
|||
24
acsent
16.11.11
✎
17:22
|
(23) На файловой наверно проверял
|
|||
25
Лефмихалыч
16.11.11
✎
17:27
|
(24) да вообще-то на серверной, у которой файл данных весит 2.7Тб
|
|||
26
Лефмихалыч
16.11.11
✎
17:28
|
(24) может это просто ты чо-то не то делал, когда получил обратные результаты?
|
|||
27
Maxus43
16.11.11
✎
17:28
|
(22) да, в СП нет, видимо в книжке какой-то читал)
|
|||
28
acsent
16.11.11
✎
17:31
|
(26) Если выборка одинаковая получается, а диапазон отбора маленький (чтоб впо инденксу искалось, а не сканом таблицы) то никак не может 2 операци выполняться быстрее одной
|
|||
29
Лефмихалыч
16.11.11
✎
17:32
|
(28) две выполняются не всегда, потому, что в запросе сокращенное вычисление условий. Именно по этому верно утверждение (1)
|
|||
30
DrLivsey
16.11.11
✎
17:34
|
База серверная, MSSQL, будут проверки по полям "Организация" и "ДокументОсенование". Потом будут вычисления по табличным частям.
Общая задача - нужен хитрый анализ основания и уже созданных подчиненных документов при создании новых подчиненных документов. Поэтому сначала отбираю нужные подчиненные документы, а потом в том же пакете запросов вычисляю их табличные части. P.S. (19), что есть СП? |
|||
31
acsent
16.11.11
✎
17:35
|
(29) Ты представляешь как сиквел вычисляет условия???
|
|||
32
acsent
16.11.11
✎
17:36
|
(29) А хоть раз план завпроса выводил?
|
|||
33
rs_trade
16.11.11
✎
17:36
|
(0) не имеет смысла. порядок вычисления выбирает оптимизатор
|
|||
34
Ахиллес
16.11.11
✎
17:37
|
Ну вот... пришёл лесник и всех разогнал :-)
|
|||
35
Ахиллес
16.11.11
✎
17:41
|
(33) А чего же тогда этот твой чудо оптимизатор не может с порядком условий в виртуальных таблицах справится?
З.Ы. Я лично в своей базе ускорил проведение документа в 30-60 раз, просто поменяв в регистре накопления порядок измерений (просто мне лень было лазить по всей конфе и менять запросы которые авнокодеры одинэсовские наваяли). |
|||
36
rs_trade
16.11.11
✎
17:42
|
||||
37
Ахиллес
16.11.11
✎
17:43
|
(35) на (35) ответь.
|
|||
38
Лефмихалыч
16.11.11
✎
17:43
|
(33) так оптимизатор-то тоже не дурак. Более того, он местами умнее некоторых адинэсников
(31) выводил, только не ради условий. У меня доступа нет в сиквелу, прямо сейчас посмотреть не могу, но вот такой запрос:
выполняется не дольше, чем такой же, но без второго условия. Непроведенных документов существенно больше проведенных в этой базе, по этому запрос с параметром П2=ложь отрабатывает иногда так же, как запрос вообще без этого условия, но чаще на 0.012сек быстрее (в базе 400+ пользюков, видать блокировки мешают). Вариант с П2=истина в три раза быстрее отрабатывает, чем без второго условия. |
|||
39
rs_trade
16.11.11
✎
17:43
|
(35) а это здесь совсем не причем. в твоем случае я так понимаю индексы причем
|
|||
40
Ахиллес
16.11.11
✎
17:45
|
(39) Как это не при чем? Есть запрос к виртуальной таблице регистра. В нём несколько условий. Меняем местами порядок условий, запрос отрабатывает в десять раз быстрее. Как так? (Я не стал менять запросы, а поменял порядок измерений в регистре, результат тот же).
|
|||
41
rs_trade
16.11.11
✎
17:48
|
(40) берешь планы обоих запросов и смотришь. будет видно почему так. в общем случае скуль не гарантирует порядок вычисления условий.
|
|||
42
Fragster
гуру
16.11.11
✎
17:50
|
(40) порядок измерений <> порядок условий в запросе, и таки да, действительно влияет на скорость, если по измерениям установлены индексы
|
|||
43
Ахиллес
16.11.11
✎
17:50
|
(1) Кстати, если отбор по "Проведён = ИСТИНА", то не лучше ли запрос к регистру какому нибудь сделать?
|
|||
44
szhukov
16.11.11
✎
17:50
|
(0) Сделай себе правильных индексов и пользуй их - будет максимальная скорость :)
Оптимизатор подстроится под индекс если такой найдется. Первый вызов может быть не быстрым (строится план и проводится оптимизация, данные кэшируются) зато последующие могут дать прирост в скорости :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |