Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Скорость запроса (число прочтений - 3974 )
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Скорость запроса
16. Октября 2008 :: 11:54
Печать  
Запрос:
============================================      
     УсловиеПоАвтору="";
     Если ПустоеЗначение(ВыбАвтор)=0 Тогда
           Recordset.УстановитьТекстовыйПараметр("ВыбАвтор",ВыбАвтор);
           УсловиеПоАвтору=УсловиеПоАвтору+" AND $СпрКонтраг.Автор=:ВыбАвтор";
     КонецЕсли;
     
     ТекстЗапроса="
     |SELECT
     |$СпрКонтраг.Автор as [АвторКарточки $Справочник.Сотрудники],
     |СпрКонтраг.id as [Контрагент $Справочник.Контрагенты],
     |Max(СпрКонтраг.Descr) as КонтрагентТекст,
     |Max(СпрСотр.Descr) as АвторКарточкиТекст,
     |Max($СпрСотр.Подразделение) as [Подразделение $Справочник.ОргСтруктура],
     |Sum(РегКонтраг.СуммаУпрПриход) as Приход
     |FROM
     |$Справочник.Контрагенты as СпрКонтраг With (NOLOCK)
     |LEFT JOIN
     |$Справочник.Сотрудники as СпрСотр With (NOLOCK) ON СпрСотр.id=$СпрКонтраг.Автор
     |LEFT JOIN
     |$Справочник.ОргСтруктура as СпрПодр With (NOLOCK) ON СпрПодр.id=$СпрСотр.Подразделение
     |LEFT JOIN
     р)) as РегКонтраг ON СпрКонтраг.id=РегКонтраг.Контрагент
     |WHERE $СпрКонтраг.ДатаПервЗаписи>:ДатаНач AND $СпрКонтраг.ДатаПервЗаписи<:ДатаКон AND $СпрПодр.фТоргующее=1
     |"+УсловиеПоАвтору+"
     |GROUP BY
     |$СпрКонтраг.Автор,СпрКонтраг.id
     |ORDER BY
     |Max($СпрСотр.Подразделение),АвторКарточкиТекст,КонтрагентТекст";
     
     
Recordset.УстановитьТекстовыйПараметр("ДатаКон",ДатаКон);
     Recordset.УстановитьТекстовыйПараметр("ДатаНач",ДатаНач);

===========================================

Суть запроса в следующем: отбираю контрагентов, у которых ДатаПервЗаписи попадает в заданный интервал дат, и по ним собираю данные из регистра Контрагенты. Этот реквизит (ДатаПервЗаписи) начал заполняться недавно, и у большинства контрагентов он пустой.

Условно скажем, что заполняться он начал с 1.10.08.

Так вот, когда указываю ДатаНач < 1.10.08, запрос летает быстро, за пару-тройку секунд. Но как только ДатаНач>1.10.08, все замедляется на порядки. Хотя по логике, данных для выборки меньше, и работать должен быстрее.

Может, он в индекс каким-то образом попадает? Может, кто что посоветует, как сделать, чтобы он всегда быстро работал.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Скорость запроса
Ответ #1 - 16. Октября 2008 :: 11:59
Печать  
Также загадкой остается, почему при условии на автора работает медленнее, чем без него...  Печаль
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Скорость запроса
Ответ #2 - 16. Октября 2008 :: 12:32
Печать  
Может, как нибудь так..
Код
Выбрать все
SELECT $СпрКонтраг.Автор [АвторКарточки $Справочник.Сотрудники],
	СпрКонтраг.id [Контрагент $Справочник.Контрагенты],
	СпрКонтраг.Descr as КонтрагентТекст,
	СпрСотр.Descr as АвторКарточкиТекст,
	СпрПодр.ID [Подразделение $Справочник.ОргСтруктура],
	Sum(РегКонтраг.СуммаУпрПриход) as Приход
FROM $Справочник.Контрагенты as СпрКонтраг With (NOLOCK)
	INNER JOIN $Справочник.Сотрудники as СпрСотр With (NOLOCK) ON СпрСотр.id = $СпрКонтраг.Автор
	INNER JOIN $Справочник.ОргСтруктура as СпрПодр With (NOLOCK) ON СпрПодр.id = $СпрСотр.Подразделение
	INNER JOIN $РегистрОбороты.Контрагенты(:ДатаНач, :ДатаКон~,,
		$Справочник.Контрагенты as СпрКонтраг With (NOLOCK) ON СпрКонтраг.id = Контрагент,
		($СпрКонтраг.ДатаПервЗаписи Between :ДатаНач AND :ДатаКон)
		"+УсловиеПоАвтору+",
		Контрагент, СуммаУпр) as РегКонтраг ON СпрКонтраг.id = РегКонтраг.Контрагент
WHERE ($СпрКонтраг.ДатаПервЗаписи Between :ДатаНач AND :ДатаКон)
	AND ($СпрПодр.фТоргующее = 1)
	"+УсловиеПоАвтору+"
GROUP BY $СпрКонтраг.Автор, СпрКонтраг.id, СпрПодр.DESCR, СпрСотр.Descr, СпрКонтраг.Descr, СпрПодр.ID
ORDER BY СпрПодр.DESCR, СпрСотр.Descr, СпрКонтраг.Descr 

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Скорость запроса
Ответ #3 - 16. Октября 2008 :: 13:11
Печать  
Да, похоже то что нужно. Теперь работает быстро в любом случае.
ВТ Обороты и соденинения внутри ВТ конечно оптимальнее.

И все же любопытство остается, почему в моем варианте в одном случае работает быстрее, чем в другом при изменении даты...
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Скорость запроса
Ответ #4 - 17. Октября 2008 :: 08:45
Печать  
А можно внутри ВТ Обороты наложить условие на ВидДокумента (если используется с разверткой по документам)?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Скорость запроса
Ответ #5 - 17. Октября 2008 :: 09:19
Печать  
IMHO, если правильно постучать в бубен, это можно сделать и без разворота по документам. Надо будет проверить при случае..  Класс
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Скорость запроса
Ответ #6 - 17. Октября 2008 :: 09:50
Печать  
> это можно сделать и без разворота по документам

- Ну, это ужо высший пилотаж  Улыбка

А хотя б с разворотом,
вот здесь можно внутрь ВТ условие на вид документа запихнуть?      
============================================
|FROM
|$РегистрОбороты.Контрагенты(:ДатаИсх, :ДатаКон~,Документ,INNER JOIN $Справочник.Контрагенты as СпрКонтраг With (NOLOCK) ON СпрКонтраг.id = Контрагент INNER JOIN $Справочник.Сотрудники as СпрСотр With (NOLOCK) ON СпрСотр.id = $СпрКонтраг.Автор INNER JOIN $Справочник.ОргСтруктура as СпрПодр With (NOLOCK) ON СпрПодр.id = $СпрСотр.Подразделение,$СпрПодр.фТоргующее = 1"+УсловиеПоАвтору+""+УсловиеПоПодразделению+"
     |,(Контрагент),(СуммаУпр)) as РегКонтраг
     |WHERE РегКонтраг.ВидДокумента=983
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Скорость запроса
Ответ #7 - 17. Октября 2008 :: 10:07
Печать  
Если нужно условие по виду документа, то использовать ВТ оборотов нет никакого смысла, надо использовать таблицу движений регистра.
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Скорость запроса
Ответ #8 - 17. Октября 2008 :: 10:09
Печать  
Neo писал(а) 16. Октября 2008 :: 11:54:
Так вот, когда указываю ДатаНач < 1.10.08, запрос летает быстро, за пару-тройку секунд. Но как только ДатаНач>1.10.08, все замедляется на порядки. Хотя по логике, данных для выборки меньше, и работать должен быстрее.

Поставь условие
ДатаНач>1.10.08 AND ДатаНач<01.01.9999
  
Наверх
ICQ  
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Скорость запроса
Ответ #9 - 17. Октября 2008 :: 10:16
Печать  
Развертка по документам нужна, так как придется еще выдергивать документы.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Скорость запроса
Ответ #10 - 17. Октября 2008 :: 10:18
Печать  
А просто ВидДокумента=983 в секции Условие не работает?

(#7) +1
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Скорость запроса
Ответ #11 - 17. Октября 2008 :: 10:21
Печать  
Не, пишет:
State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'ВидДокумента'.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Скорость запроса
Ответ #12 - 17. Октября 2008 :: 10:24
Печать  
Без ВТ по регистрам просто не писал запросы, а сейчас некогда вникать, надо быстрее отчет закончить. Пока хотя бы в таком виде. Тем более что скорость устраивает вполне.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Скорость запроса
Ответ #13 - 17. Октября 2008 :: 10:25
Печать  
Не нужно тебе это, заведи быстренько реквизит
Проверь как будет работать штатный запрос в котором есть условие "Когда Док.Вид()" - ооочень тормозит
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Скорость запроса
Ответ #14 - 17. Октября 2008 :: 11:08
Печать  
Вадимко писал(а) 17. Октября 2008 :: 10:25:
Не нужно тебе это, заведи быстренько реквизит
Проверь как будет работать штатный запрос в котором есть условие "Когда Док.Вид()" - ооочень тормозит

Штатный запрос это условие проверяет на стороне клиента.

Neo писал(а) 17. Октября 2008 :: 10:21:
Не, пишет:
State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'ВидДокумента'.

Ну напиши тогда

iddocdef=983

Со сжатыми губами
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать