|
Оптимизация запросов (внутреннее соединение vs. секция ГДЕ) | ☑ | ||
---|---|---|---|---|
0
Pandoch
30.07.20
✎
17:03
|
Коллеги, добрый день. Стоит задача оптимизировать лютый многопакетный запрос. И приходится обращать внимание на каждую мелочь. Верно ли, что быстрее будет работать внутреннее соединение с таблицей, по которой нужно отсеять записи, чем брать вторую таблицу (Т1) полностью, а потом на секции ГДЕ писать условие по вхождению в таблицу-отбор Т2?
ПРИМЕР: ВЫБРАТЬ Т1.Основание ИЗ документ.Жалоба как Т1 ГДЕ Т1.Основание в (выбрать Т2.Закупка из Т2); ПРОТИВ: ВЫБРАТЬ Т1.Основание ИЗ документ.Жалоба как Т1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Т2 Как Т2 ПО Т1.Основание = Т2.Закупка; |
|||
1
Ёпрст
30.07.20
✎
17:05
|
(0) нет не верно
|
|||
2
Ёпрст
30.07.20
✎
17:07
|
а лютый многопакетный запрос нужно ловить в профайлере и смотреть план выполнения каждого запроса и делать выводы
|
|||
3
Pandoch
30.07.20
✎
17:08
|
(1) можно пожалуйста поподробнее) секция ГДЕ ведь накладывается сверху на всю таблицу Т1. То есть больше записей обрабатываться будет
|
|||
4
Garykom
гуру
30.07.20
✎
17:15
|
(3) На практике все зависит от sql сервера (это уже после того как сервер 1С запрос оттранслировал) как он отработает.
Там у разрабов sql серверов/движков война же фактически кто лучше прооптимизирует самые хреновые запросы. Так что только (2) и пытаться менять лютый запрос делая тесты |
|||
5
Ёпрст
30.07.20
✎
17:18
|
(3) в данном случае, оба запроса с большей долей вероятности дадут один план выполнения запроса.
А так, сравнивай планы. И..это больше религиозная война, иннер джоин или where в таком запросе |
|||
6
Pandoch
30.07.20
✎
17:18
|
(4) Можете дать название софта, чего за профайлер? Ни разу не пользовалась таким методом)
|
|||
7
Ёпрст
30.07.20
✎
17:19
|
(6) у тя файловая база что ле ?)
|
|||
8
Pandoch
30.07.20
✎
17:19
|
Серверная
|
|||
9
NcSteel
30.07.20
✎
17:21
|
||||
10
Ёпрст
30.07.20
✎
17:21
|
(8) и формат базы какой sql/постриги ?
|
|||
11
Pandoch
30.07.20
✎
17:21
|
sql
|
|||
12
Pandoch
30.07.20
✎
17:22
|
(9) пасиб, будем смотреть
|
|||
13
NcSteel
30.07.20
✎
17:22
|
(11) Это понятно, но какой?
|
|||
14
Pandoch
30.07.20
✎
17:25
|
(13) у меня нету доступов, там сервера все закрыты, секретности
|
|||
15
Ёпрст
30.07.20
✎
17:28
|
(14) ну тогда настраивай ТЖ и смотри там, или сымотри через ИР, там тоже есть план. Только его лучше потом смотреть в SentryOnePlanExplorer
|
|||
16
Конструктор1С
30.07.20
✎
19:52
|
(0) случаем не по составным полям соединяешь?
|
|||
17
ILM
гуру
30.07.20
✎
20:13
|
У меня был запрос сборки бдр за два года с исключением вхо написанный 8 лет назад, который делал 156 временных таблиц, длиной 6500 строк кода и выполнялся 130 секунд. Спустя два года сделал рефакторинг и он стал 2500 строк и выполнялся уже 30 секунд. Недавно, месяца два назад понадобилось внести правки и полностью переписал запрос сейчас он меньше 1500 строк и выполняется 7-10 секунд. Основной упор был сделан на получение максимума данных из таблицы за один проход по ней, так что не важна секция "где" или "внутреннее соединение" если к огромной таблице обращаешься 10 или 20 раз. Лучше хорошо подумать и сделать максимально эффективно за один раз.
|
|||
18
acht
30.07.20
✎
20:18
|
(0) Это разные запросы. Второй может размножить строки при неуникальности данных.
|
|||
19
H A D G E H O G s
30.07.20
✎
20:21
|
(18) обычно не размноживает :-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |