Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Оптимизация скорости выполнения запроса          
Sympho Подменю пользователя
сообщение 18.10.17, 10:54
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

Подскажите, пожалуйста, возможно-ли как-то оптимизировать запрос по выборке документов с определенными значениями реквизитов?

Пример:

ВЫБРАТЬ
    Документ.Ссылка КАК Ссылка
ИЗ
    Документ.ЛюбойДокумент КАК Документ
ГДЕ
    Документ.Реквизит = &НеобходимоеЗначениеРеквизита
    И НЕ Документ.Ссылка В (&ЛюбойОтборСпискаДокументов)


Т.е. тут отбираются все документы и только потом на таблицу накладывается отбор (документов туча). Как можно оптимизировать по скорости?

sava1 Подменю пользователя
сообщение 18.10.17, 11:26
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

1. Индексировать по реквизиту.
2. Уйти от конструкции НЕ в .....

Sympho Подменю пользователя
сообщение 18.10.17, 11:33
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

Изменил запрос на:

ВЫБРАТЬ
    Документ.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТДоки
ИЗ
    Документ.ЛюбойДокумент КАК Документ
ГДЕ
    Документ.Ссылка = &НеобходимоеЗначениеРеквизита
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТДоки.Ссылка
ИЗ
    ВТДоки КАК ВТДоки
ГДЕ
    НЕ ВТДоки.Ссылка В (&ЛюбойОтборСпискаДокументов)


Стало выполняться больше чем на порядок быстрей. Не знаю, правда, насколько это правильно...

Vofka Подменю пользователя
сообщение 18.10.17, 11:56
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата(Sympho @ 18.10.17, 12:33) *
Изменил запрос

По-моему, какая-то ерунда получилась, которая по своему смыслу ещё и отличается от первоначального запроса.

Sympho Подменю пользователя
сообщение 18.10.17, 12:06
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

Это я уже понял что хрень какая-то вышла, надо подышать)

Sympho Подменю пользователя
сообщение 18.10.17, 13:43
Сообщение #6

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

Там в условии Документ.Реквизит, опечатался. Но, в итоге все равно по скорости отрабатывает одинаково.
Итого, насколько я понял, альтернативы нет.

sava1 Подменю пользователя
сообщение 18.10.17, 14:16
Сообщение #7

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Цитата(Sympho @ 18.10.17, 14:43) *
альтернативы нет.


Чему ?

В таком варианте время выборки зависит от размера списка ЛюбойОтборСпискаДокументов
Цитата(Sympho @ 18.10.17, 12:33) *
ГДЕ НЕ ВТДоки.Ссылка В (&ЛюбойОтборСпискаДокументов)


Выбирете все документы из списка во временную таблицу
Потом соедините с основной выборкой по NULL

Sympho Подменю пользователя
сообщение 18.10.17, 15:40
Сообщение #8

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

sava1 @ Сегодня, 14:16 * ,
Спасибо, попробую.
А если нет списка? Т.е. просто:

ВЫБРАТЬ
    Документ.Ссылка КАК Ссылка
ИЗ
    Документ.ЛюбойДокумент КАК Документ
ГДЕ
    Документ.Реквизит = &СсылкаНаДругойДокумент



Такое не ускоряется? Просто в базе десятки тысяч документов.

Flexy Подменю пользователя
сообщение 18.10.17, 21:55
Сообщение #9

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Цитата(Sympho @ 18.10.17, 11:33) *
Изменил запрос на:

Имхо, не верная логика. Для начала нужно ограничить список документов (первый пакет запроса - виртуальная таблица + индекс по нужному полю). Вторым пакетом - отбор с условием по нужному значению поля.

andr_andrey Подменю пользователя
сообщение 20.10.17, 17:44
Сообщение #10

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 623
Спасибо сказали: 166 раз
Рейтинг: 130.8

sava1 @ 18.10.17, 15:16 * ,
Цитата(sava1 @ 18.10.17, 15:16) *
В таком варианте время выборки зависит от размера списка ЛюбойОтборСпискаДокументов
Цитата(Sympho @ 18.10.17, 12:33) *
ГДЕ НЕ ВТДоки.Ссылка В (&ЛюбойОтборСпискаДокументов)


Выбирете все документы из списка во временную таблицу
Потом соедините с основной выборкой по NULL

Насколько помню, SQL server даёт одинаковые планы выражению "В" и соединению с отбором по NULL. (в прошлом это меня приятно удивило по сравнению с mysql, который так делать не умел, и в рекомендациях была такая оптимизация).


Signature
#define private public
enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day

sava1 Подменю пользователя
сообщение 20.10.17, 18:18
Сообщение #11

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Цитата(andr_andrey @ 20.10.17, 18:44) *
одинаковые планы выражению "В" и соединению с отбором по NULL


Да, но не по "НЕ В"

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 15:16
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!