powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Чем неоптимален данный запрос?
25 сообщений из 66, страница 2 из 3
Чем неоптимален данный запрос?
    #39022397
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с,

Этого аргумент на экзамене?

Основные причины неоптимальной работы запросов, диагностируемые на уровне кода конфигурации и структуры метаданных:

соединения с подзапросами;
соединения с виртуальными таблицами;
несоответствие индексов и условий запроса;
использование логического ИЛИ в условиях;
использование подзапросов в условии соединения;
получение данных через точку от полей составного типа;
фильтрация виртуальных таблиц без использования параметров.


P.S. Подчеркну, что в шестым упомянуто разыменовывание полей только СОСТАВНОГО типа.

P.P.S. Допускаю, что автор отсортировал не по неоптимальности, а по длине наименования (для лучшего визуального восприятия).
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39022400
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZerroГоворил что одна точка это не плохо и заворачиваться ради оптимизации не стоитПрограммист 1сpsps 2 точки и больше - нежелательно применять в запросах.Может всетаки 2? (А на самом деле при 3 точках как раз и наблюдал падение скорости запроса в десятки раз)

А автору дал ответ исходя из рекомендаций курсов 1с, где скорее всего ему и дали такую задачу.
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39022446
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP, ты сам заметишь слово в цитате (и оно отличается от слова "все")?

https://its.1c.ru/db/metod8dev#content:5842:hdoc
AHDPТипичные причины неоптимальной работы запросов и методы оптимизации.Будешь спорить что куча точек для несоставного типа, не является причиной неоптимальной работы запроса?

ps Визуально согласен, естественно выглядит лучше.
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39022723
sevdo_tool
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Профайлер доступен только для клиент-серверного варианта работы насколько я понимаю?
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39022803
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sevdo_toolПрофайлер доступен только для клиент-серверного варианта работы насколько я понимаю?

профайлер в постгри тоже недоступен

за наличием отсутствия пропитанных шпал!
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39023066
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с ,

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



А по теме неоптимальности запроса только два однозначных замечания :
1) уточнить, для чего будут использоваться его результаты и, очень вероятно, что надо будет получать не ссылку , а наименование номенклатуры . Мы же не хотим получить на каждую строку неявный запрос к БД при выводе отчета ;
2) заменить группировку на Различные .

Остальные рекомендации обсуждать некорректно, т.к. они зависят не только от данных в БД , но и от параметров запроса .

Согласен с Shuhard , что документами пользоваться не стоит, но не согласен с приведенной аргументацией.
С точки зрения пользователя операция продажи может быть отображена и другим видом документов (корректировка, возврат...). И даже если пользователь просит показать ему только реализацию, то неплохо ему подсказать , что нужно смотреть и иные данные.
С точки зрения программиста - записи в регистре уже удовлетворяют одному условию (не нужно проверять просвещённость) и можно надеяться на попадание в индекс большего числа необходимых полей. В идеале запрос сведется к сканированию индекса регистра и чтению из 2х таблиц (договоры, номенклатура), против сканирования индекса таблицы договоры с последующим чтением из неё и чтением из 3х таблиц (товары, договоры, номенклатура). Итого выкинули одно условие и одну таблицу .

Программист 1с ,
1С не поддерживает хинты (мы же за MS SQL говорим), по этому оптимизатор будет в любом случае разгребать запрос, как бы он не был заковыристо написан.

autsaider ,
если будет индекс Проведен, Дата, Договор - то . Но за индексацию "лишних" данных надо карать не менее строго, чем за кривые запросы.
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39023118
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP 1С не поддерживает хинты

поддерживает как минимум два

nolock и updlock
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39023365
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последний выдох ГПЖ ,
Уточнение принимается, но к обсуждаемой теме не относиться.
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39023415
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDPУточнение принимается, но к обсуждаемой теме не относиться.

имхо тема сдохла давно
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39023888
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP, я в отпуск уезжаю. Потом поспорим
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39023906
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с, мне кажется вы путаете текст запроса и план запроса. если с планом могут быть вопросы, то сам запрос, который придет в субд от 1с после преобразования в SQL - выглядит совершенно определенно, и это легко проверяется. Как уже сказали, точка для несоставных полей это просто левое соединение. и никакой разницы, сами вы это соединение опишете, или положитесь на запрос через точку - просто не существует.
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39023997
sevdo_tool
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор AHDPА по теме неоптимальности запроса только два однозначных замечания:
1) уточнить, для чего будут использоваться его результаты

Вообще эта задачку мне дали на проверку как тест:

Оптимизация запроса
В «1С:Управление торговлей» была реализована выгрузка списка проданных товаров во внешнюю сиситему. Со временем в базе было накоплено большое количество данных и выгрузка стала работать медленно. Замер времени выполнения показал, что основное время занимает выполнение следующего запроса:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
ВЫБРАТЬ

Реализация.Номенклатура

ИЗ

Документ.ПродажаТоваров.СписокТоваров КАК Реализация

ГДЕ

Реализация.Ссылка.Проведен

И Реализация.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаОкон

И Реализация.Ссылка.Договор.ВидДоговора = &ВидДоговора

СГРУППИРОВАТЬ ПО

Реализация.Номенклатура



Предложите вариант оптимизации запроса.
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39024002
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sevdo_toolавтор AHDPА по теме неоптимальности запроса только два однозначных замечания:
1) уточнить, для чего будут использоваться его результаты

Вообще эта задачку мне дали на проверку как тест:

Оптимизация запроса
В «1С:Управление торговлей» была реализована выгрузка списка проданных товаров во внешнюю сиситему. Со временем в базе было накоплено большое количество данных и выгрузка стала работать медленно. Замер времени выполнения показал, что основное время занимает выполнение следующего запроса:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
ВЫБРАТЬ

Реализация.Номенклатура

ИЗ

Документ.ПродажаТоваров.СписокТоваров КАК Реализация

ГДЕ

Реализация.Ссылка.Проведен

И Реализация.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаОкон

И Реализация.Ссылка.Договор.ВидДоговора = &ВидДоговора

СГРУППИРОВАТЬ ПО

Реализация.Номенклатура



Предложите вариант оптимизации запроса.
регистр продаж (дата1 и дата 2 и док = реализация)
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39024053
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Реализация.Ссылка.Проведен
>И Реализация.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаОкон

стоит поменять местами - будет попадание в индекс [ОРРХ | ОРНР1 +] Дата + Ссылка
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39024185
sevdo_tool
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Последний выдох ГПЖстоит поменять местами - будет попадание в индекс [ОРРХ | ОРНР1 +] Дата + Ссылка
Об этом поподробнее, пожалуйста. Неужели порядок следования в условии ГДЕ на что-то влияет?
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39024226
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sevdo_toolПоследний выдох ГПЖстоит поменять местами - будет попадание в индекс [ОРРХ | ОРНР1 +] Дата + Ссылка
Об этом поподробнее, пожалуйста. Неужели порядок следования в условии ГДЕ на что-то влияет?

не тут наверное наврал - коллега говорит что порядок в где не важен оптимизатор сам определит как лучше зацепиться за индекс
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39024375
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerПрограммист 1с, мне кажется вы путаете текст запроса и план запроса. если с планом могут быть вопросы, то сам запрос, который придет в субд от 1с после преобразования в SQL - выглядит совершенно определенно, и это легко проверяется. Как уже сказали, точка для несоставных полей это просто левое соединение. и никакой разницы, сами вы это соединение опишете, или положитесь на запрос через точку - просто не существует.А в чем смысл разговора об запросе? Нам не важна производительность? Нам плевать какой мусор придет в sql? Поэтому разрешаем делать десять точек - ведь это просто левое соединение?

Или мы должны сделать так чтобы план запроса был оптимальным и sql не ошибался? Соответственно и запрос в 1с должен выглядеть по другому?
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39024377
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zerrosevdo_toolпропущено...


Вообще эта задачку мне дали на проверку как тест:

Оптимизация запроса
В «1С:Управление торговлей» была реализована выгрузка списка проданных товаров во внешнюю сиситему. Со временем в базе было накоплено большое количество данных и выгрузка стала работать медленно. Замер времени выполнения показал, что основное время занимает выполнение следующего запроса:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
ВЫБРАТЬ

Реализация.Номенклатура

ИЗ

Документ.ПродажаТоваров.СписокТоваров КАК Реализация

ГДЕ

Реализация.Ссылка.Проведен

И Реализация.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаОкон

И Реализация.Ссылка.Договор.ВидДоговора = &ВидДоговора

СГРУППИРОВАТЬ ПО

Реализация.Номенклатура



Предложите вариант оптимизации запроса.
регистр продаж (дата1 и дата 2 и док = реализация)Если так поставить задачу... То может надо к оборотному регистру продажи обращаться (за период, а проведен не проверяем это и так есть) и группировка по номенклатуре? Должно быть гораздо быстрее.
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39024467
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quot sevdo_tool,

Удивите их ответом, что добавление при оптимизации запроса .Наименование запрос притормозит, но сильно ускорит формирование печатной формы.
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39025232
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1сА в чем смысл разговора об запросе? Нам не важна производительность? Нам плевать какой мусор придет в sql? Поэтому разрешаем делать десять точек - ведь это просто левое соединение?

Или мы должны сделать так чтобы план запроса был оптимальным и sql не ошибался? Соответственно и запрос в 1с должен выглядеть по другому?
Поясняю - смысл в том что вы писали о том что точки плохи сами по себе, и предалгали заменить их левыми соединениями, делая вывод что это повлияет на план выполнения запроса. Но это не так, отсюда мой предыдущий вывод.
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39025300
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самая мякоть в запросе - это неявный джоин ТЧ с шапкой документа с наложением условий на реквизиты шапки (т.е. сначала сджойнит все со всем, только потом уже начнет фильтровать из этого месива) + суммирование ради получения distinct
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39025334
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerПрограммист 1сА в чем смысл разговора об запросе? Нам не важна производительность? Нам плевать какой мусор придет в sql? Поэтому разрешаем делать десять точек - ведь это просто левое соединение?

Или мы должны сделать так чтобы план запроса был оптимальным и sql не ошибался? Соответственно и запрос в 1с должен выглядеть по другому?
Поясняю - смысл в том что вы писали о том что точки плохи сами по себе, и предалгали заменить их левыми соединениями, делая вывод что это повлияет на план выполнения запроса. Но это не так, отсюда мой предыдущий вывод.Угу. Тоесть конкретный пример с несколькими точками который увеличивал время работы в десятки раз, а после замены на простые блоки сильно ускорился является ошибкой? Надо оставлять запрос с многими точками. Такова Ваша позиция?
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39025365
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1сУгу. Тоесть конкретный пример с несколькими точками который увеличивал время работы в десятки раз, а после замены на простые блоки сильно ускорился является ошибкой? Надо оставлять запрос с многими точками. Такова Ваша позиция? Нет, не такая у меня позиция. У меня примерно такая - причины надо по возможности искать объективные, а не на основе предположений и догадок. Точки это не мистика, как они преобразуются в запросе - известно. Причиной тормозов с вашим запросом было то, что соединение, в которое преобразовывались точки - не подходило для вашего конкретного случая. Возможно из-за причины указанной выше - что соединения по точкам выполнялись раньше чем условия отбора в запросе. Но это не говорит о том что точки - зло.
В общем я за то, чтобы понимать причины по которым выполняются те или иные действия. А то может получиться как в этой притче:
АКТ ПЕРВЫЙ
В доме супружеской пары. Жена весь день занималась приготовлением замечательного окорока для своего мужа, первого в жизни - окорока, а не мужа...
Он (пробует). Превосходно. только зачем ты его обрезала?
Она. Так всегда делают, когда запекают окорок.
Он. Вовсе нет. Я много раз ел окорок, запеченный целиком.
Она. Наверно, если его обрезать, получается вкуснее.
Он. Что за чушь! Почему?
Она (неуверенно). Моя мама так готовила...
Он. Тогда пойдем к твоей маме.

АКТ ВТОРОЙ

В доме ее матери.
Она. Мама, как правильно запечь окорок?
М ать. Нужно замариновать его, обрезать и положить в печь.
Он а (мужу). Вот видишь?
Он. Сеньора, а зачем его нужно обрезать?
Мать (неуверенно). Ну, знаете... Маринады... Стряпня... Моя мать всегда так делала!
Он. Отлично, тогда идем к бабушке!

АКТ ТРЕТИЙ

В доме ее бабушки.
Она. Бабуля, как правильно готовить запеченный окорок?
Бабушка. Сначала я его как следует мариную, даю постоять часа три, потом обрезаю и кладу в печь.
М ать (зятю). Вот видишь!
Она (мужу). Вот видишь!
Он (совершенно сбитый с толку). Позвольте, бабушка, но зачем же его обрезать?
Бабушка. Боже милостивый, да затем, чтоб окорок в печи поместился. У меня печка такая тесная...
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39025391
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerНо это не говорит о том что точки - зло.Итак вернулись к началу. 10 точек подряд не является злом. Это нормально?javapeckerТочки это не мистика, как они преобразуются в запросе - известно.А в план запроса?


ps Еще раз уточним - скидывать все в одну кучу и отправлять в sql это нормально? Потому что Вам точно известны все преобразования?
...
Рейтинг: 0 / 0
Чем неоптимален данный запрос?
    #39025755
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТочки это не мистика, как они преобразуются в запросе - известно.
А в план запроса?
Программист 1с, вы занимаетесь софистикой. Я не утверждал что 10 точек это хорошо, нормально, или лушче, или хуже чем 10 левых соединений. Я утверждал что это одно и то же. А вы утверждали что точки ухудшают производительность запроса сами по себе, потому что так написано у 1С, и что можно судить о выполнении запроса с точками и без точек только изучая план запроса, котрый (уже не первый раз повторяю) здесь совершенно ни при чем, потому что точно известно как будет выглядеть запрос после преобразования точек в соединения. СУБД о существовании 1С не подозревает, ей все равно кто прислал запрос, и что с ним происходило до того как он к СУБД попал. Если тексты запросов с точками и без точек в итоге окажутся одинаковыми, то и план у них при прочих равных условиях будет одинаковый. Я даже не надеюсь что вы поверите на слово, поэтому просто проверьте любым доступным средством мониторинга запросов.
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 2 из 3
Форумы / [игнор отключен] [закрыт для гостей] / Чем неоптимален данный запрос?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]