Имя: Пароль:
1C
1С v8
Оптимизация запросов (внутреннее соединение 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
http://catalog.mista.ru/1c/articles/291874/

статейка первая в гугле
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) обычно не размноживает :-)