Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) оптимизация запроса для формы списка справочника с остатком (число прочтений - 6495 )
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3047
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #15 - 06. Октября 2016 :: 10:25
Печать  
я у себя потестил это запрос
у меня тоже seek только по полю period, если есть условие по складу, но выполняется моментально
без условия по складу - по period+Товар
  

1&&2&&3
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #16 - 06. Октября 2016 :: 10:33
Печать  
Прикрепляю скрины планов, разница только в seek predicates, как я и говорил. Ну и итог: при правильном плане actual number of rows - 0 (в начале списка товаров остатков нет), при неправильном - больше 2 миллионов (я так понимаю, все остатки на ТА в разрезе складов). Получается, никак повлиять на такое поведение нельзя?
https://yadi.sk/i/Sw2tLTrrwM639
https://yadi.sk/i/1pKWfVsvwM68Y
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #17 - 06. Октября 2016 :: 11:54
Печать  
trad писал(а) 06. Октября 2016 :: 10:25:
я у себя потестил это запрос
у меня тоже seek только по полю period, если есть условие по складу, но выполняется моментально
без условия по складу - по period+Товар

Это так и должно быть, поэтому с чего оно тормозит не очень понятно.

pavel_tr А попробуй использовать не jeft join, а просто join. Что нибудь поменяется?
  
Наверх
www  
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #18 - 06. Октября 2016 :: 12:34
Печать  
С join работает быстрее. Не моментально, но значительно быстрее (в правильной статистикой - 0 сек., с тухлой - 19 сек., с join - 2 сек.). Вместо 2 миллионов строк в соединении участвует 41 тысяча
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #19 - 06. Октября 2016 :: 13:39
Печать  
pavel_tr писал(а) 06. Октября 2016 :: 12:34:
С join работает быстрее. Не моментально, но значительно быстрее (в правильной статистикой - 0 сек., с тухлой - 19 сек., с join - 2 сек.). Вместо 2 миллионов строк в соединении участвует 41 тысяча

19c это кошмар. Да и 2 тоже. Сколько у тебя строк в остатках?  Ужас
left везде убрал или только там? Остатки нужны на определенную дату? Если нет то можно отказаться от виртуальных таблиц, запрос совсем простой будет.
  
Наверх
www  
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #20 - 06. Октября 2016 :: 14:37
Печать  
Остатки хранятся в разрезе партий, на ТА для обозначенного в запросе склада 40985 записей.
Для теста оригинальный запрос сильно облегчил, оставил минимум полей и таблиц. 19 сек - это запрос по таблице товаров и регистру остатков.
Остатки нужны всегда на ТА, думал отказаться от виртуальной таблицы, но сейчас-то она разворачивается в правильный запрос, вроде ничего лишнего - смысл?

В остатках на ТА по всем складам 1 209 050 записей
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #21 - 06. Октября 2016 :: 15:53
Печать  
А ОбратныйРасчетОтТА включен? Я так понимаю что виртуальные таблицы при запросе на дату ТА должны выкинуть 2 лишних джойна.
  
Наверх
www  
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #22 - 06. Октября 2016 :: 16:30
Печать  
Нет, не включал. У меня не ODBCRecordset, а ПоставщикДанныхODBC.MSSQL - данные выводятся в табличном поле
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #23 - 06. Октября 2016 :: 18:34
Печать  
pavel_tr писал(а) 06. Октября 2016 :: 16:30:
Нет, не включал. У меня не ODBCRecordset, а ПоставщикДанныхODBC.MSSQL - данные выводятся в табличном поле

Забыл что это свойство там не доступно ;(
Хотя там все равно внутри recordset...
Попробуй без виртуальных таблиц. 2с ну никак не пригодно для табличного поля. Табличное поле работает отлично, но вот ограничение выборки с такойто по такуюто запись, что должно ускорять работу, не всегда понимает sql сервер и пересчитывает всю таблицу целиком, и это почти всегда медленно.
  
Наверх
www  
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #24 - 06. Октября 2016 :: 19:11
Печать  
Собственно, 19 секунд - время выполнения запроса в QA. Текст запроса взят из отладки и там стоит select top 49. В полном запросе от виртуальных таблиц откажусь, но тормоза от этого не кончатся ((
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #25 - 06. Октября 2016 :: 20:02
Печать  
1с для того чтобы такого не было сделала отдельный регистр остатков (без партий) Подмигивание

Есть у меня убитая конфа где ПартииНаличие вообще почти не закрываются, и чинить это я там не собираюсь... Накреативили разные умники с моим напарником всякое, вот пусть он и чинит...
Для того чтобы подобное работало с приемлемй скоростью врубил индекс по Номенклатуре и вычисляю остаток отдельным запросом при выводе строки ТП. Там мне еще и партии нужны, но по ним индекс я поднимать не стал, хватило по Номенклатуре. Иначе никак не шевелится.

Это табличное поле... т.е. ограничения топ49 то есть, а sql все равно может вычислять все, и только потом ограничивать по топ49  Печаль


« Последняя редакция: 06. Октября 2016 :: 22:28 - Djelf »  
Наверх
www  
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #26 - 07. Октября 2016 :: 04:19
Печать  
Да, занятно...
Переделал на получение остатков при выводе строки ТП. Так работает быстро. Не очень красиво, конечно, но что делать
« Последняя редакция: 07. Октября 2016 :: 06:27 - pavel_tr »  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3047
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #27 - 07. Октября 2016 :: 06:53
Печать  
можно получение остатка еще в корреляционный подзапрос перенести, тоже скорее всего будет сикать по обоим полям
  

1&&2&&3
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: оптимизация запроса для формы списка справочника с остатком
Ответ #28 - 07. Октября 2016 :: 18:48
Печать  
trad писал(а) 07. Октября 2016 :: 06:53:
можно получение остатка еще в корреляционный подзапрос перенести, тоже скорее всего будет сикать по обоим полям

может сработать. скорости не сильно прибавит, но будет красивее...
эх... нету такого в sqlite ;(
« Последняя редакция: 07. Октября 2016 :: 21:37 - Djelf »  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать