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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
План выполнения
30. Апреля 2008 :: 02:22
Печать  
Использую табличное поле,  запрос:

Код
Выбрать все
Declare @QParam__filter_2_9_0 numeric(9,0), @OKParam_0 varchar(99)
set @QParam__filter_2_9_0 = -10000000
set @OKParam_0 = 'Деликатесная в/к    84   '

select top 20
	N.KeySort as КлючПорядка,
	N.id1s as ИД,
	N.PLU as PLU,
	N.Descr as Наименование,
	N.Unit as ЕдИзм,
	N.isUnit as Штучная,
	isNULL(CASE
				WHEN N.isUnit = 1 THEN  TBS.ОсталосьКоличество
				ELSE  TBS.ОсталосьВес
			END,0 ) as ОсталосьИтого
from Nomenclature as N (nolock)
left  join
(
	Select
		T.ИдНом,
		SUM(T.НабраноВес) as НабраноВес,
		SUM(T.НабраноКоличество) as НабраноКоличество,
		SUM(T.ЗаказаноВес) as ЗаказаноВес,
		SUM(T.ЗаказаноКоличество) as ЗаказаноКоличество,
		SUM(T.ЗаказаноКоличество) - SUM(T.НабраноКоличество) as ОсталосьКоличество,
		SUM(T.ЗаказаноВес) - SUM(T.НабраноВес) as ОсталосьВес
	From dbo.GetTrafficByStatusByRequest(101) as T
	group by T.ИдНом


) as TBS  on TBS.ИдНом = N.id1s
where (N.KeySort > @OKParam_0)
order by N.KeySort

 



Всё хорошо выполняется порядко 80 мс, добавляю условие:
and  TBS.ОсталосьВес  > @QParam__filter_2_9_0

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


  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: План выполнения
Ответ #1 - 30. Апреля 2008 :: 05:12
Печать  
план запроса не мешает бы, тот который за 80мс, и dds
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: План выполнения
Ответ #2 - 30. Апреля 2008 :: 05:13
Печать  
ev-kov писал(а) 30. Апреля 2008 :: 05:12:
план запроса не мешает бы, тот который за 80мс


А зачем он тебе? Посмотри, что есть TBS.ОсталосьВес и погрусти вместе со скулем.
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: План выполнения
Ответ #3 - 30. Апреля 2008 :: 05:17
Печать  
sadovnikov писал(а) 30. Апреля 2008 :: 05:13:
ev-kov писал(а) 30. Апреля 2008 :: 05:12:
план запроса не мешает бы, тот который за 80мс


А зачем он тебе? Посмотри, что есть TBS.ОсталосьВес и погрусти вместе со скулем.

хинты выставить самому вручную, с учетом имеющихся индексов

ЗЫ: я правильно понимаю скуль игнорировать хинты не может, он должен следовать им?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: План выполнения
Ответ #4 - 30. Апреля 2008 :: 05:19
Печать  
ev-kov писал(а) 30. Апреля 2008 :: 05:17:
хинты выставить самому вручную, с учетом имеющихся индексов


И какой индекс ты планируешь задействовать для:

SUM(T.ЗаказаноВес) - SUM(T.НабраноВес)

?
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: План выполнения
Ответ #5 - 30. Апреля 2008 :: 05:25
Печать  
а если заменить

Код
Выбрать все
   select
	T.ИдНом,
		SUM(T.НабраноВес) as НабраноВес,
		SUM(T.НабраноКоличество) as НабраноКоличество,
		SUM(T.ЗаказаноВес) as ЗаказаноВес,
		SUM(T.ЗаказаноКоличество) as ЗаказаноКоличество,
		SUM(T.ЗаказаноКоличество) - SUM(T.НабраноКоличество) as ОсталосьКоличество,
		SUM(T.ЗаказаноВес) - SUM(T.НабраноВес) as ОсталосьВес
	From dbo.GetTrafficByStatusByRequest(101) as T
	group by T.ИдНом
 



на
Код
Выбрать все
 
          select
		TT.НабраноВес as НабраноВес,
		TT.НабраноКоличество as НабраноКоличество,
		TT.ЗаказаноВес as ЗаказаноВес,
		TT.ЗаказаноКоличество as ЗаказаноКоличество,
		TT.ОсталосьКоличество as ОсталосьКоличество,
		TT.ОсталосьВес as ОсталосьВес
           FROM (
            select
	T.ИдНом,
		SUM(T.НабраноВес) as НабраноВес,
		SUM(T.НабраноКоличество) as НабраноКоличество,
		SUM(T.ЗаказаноВес) as ЗаказаноВес,
		SUM(T.ЗаказаноКоличество) as ЗаказаноКоличество,
		SUM(T.ЗаказаноКоличество) - SUM(T.НабраноКоличество) as ОсталосьКоличество,
		SUM(T.ЗаказаноВес) - SUM(T.НабраноВес) as ОсталосьВес
	From dbo.GetTrafficByStatusByRequest(101) as T
	group by T.ИдНом ) as TT

 

  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: План выполнения
Ответ #6 - 30. Апреля 2008 :: 05:25
Печать  
sadovnikov писал(а) 30. Апреля 2008 :: 05:19:
ev-kov писал(а) 30. Апреля 2008 :: 05:17:
хинты выставить самому вручную, с учетом имеющихся индексов


И какой индекс ты планируешь задействовать для:

SUM(T.ЗаказаноВес) - SUM(T.НабраноВес)

?


Да тут врядли удастся что -нибудь сделать, разве что Indexed View прикрутить попробывать
  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: План выполнения
Ответ #7 - 30. Апреля 2008 :: 05:26
Печать  
sadovnikov писал(а) 30. Апреля 2008 :: 05:19:
ev-kov писал(а) 30. Апреля 2008 :: 05:17:
хинты выставить самому вручную, с учетом имеющихся индексов


И какой индекс ты планируешь задействовать для:

SUM(T.ЗаказаноВес) - SUM(T.НабраноВес)

?

для него конечно индекса нет, планировал вручную указать оптимизатору какие использвать, а другие не использовать
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: План выполнения
Ответ #8 - 30. Апреля 2008 :: 05:32
Печать  
ev-kov писал(а) 30. Апреля 2008 :: 05:12:
план запроса не мешает бы, тот который за 80мс, и dds

А план запроса можно как- нибудь сохранить кроме как PrintScreen?
  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: План выполнения
Ответ #9 - 30. Апреля 2008 :: 05:37
Печать  
Nick писал(а) 30. Апреля 2008 :: 05:32:
ev-kov писал(а) 30. Апреля 2008 :: 05:12:
план запроса не мешает бы, тот который за 80мс, и dds

А план запроса можно как- нибудь сохранить кроме как PrintScreen?

1CQA умеет сам строить планы - текстовые Улыбка
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: План выполнения
Ответ #10 - 30. Апреля 2008 :: 05:39
Печать  
ev-kov писал(а) 30. Апреля 2008 :: 05:37:
Nick писал(а) 30. Апреля 2008 :: 05:32:
ev-kov писал(а) 30. Апреля 2008 :: 05:12:
план запроса не мешает бы, тот который за 80мс, и dds

А план запроса можно как- нибудь сохранить кроме как PrintScreen?

1CQA умеет сам строить планы - текстовые Улыбка

Ага, только соединение у меня ни через 1с, это нужно 1CQA переписывать
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: План выполнения
Ответ #11 - 30. Апреля 2008 :: 06:35
Печать  
Nick писал(а) 30. Апреля 2008 :: 05:32:
А план запроса можно как- нибудь сохранить кроме как PrintScreen?

Например, так:
QA-Tools-Options-Coonection properties-Set showplan_text

Или так:
Код
Выбрать все
SET SHOWPLAN_TEXT ON
GO

...

SET SHOWPLAN_TEXT OFF
GO
 

  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: План выполнения
Ответ #12 - 30. Апреля 2008 :: 06:44
Печать  
spock писал(а) 30. Апреля 2008 :: 06:35:
Nick писал(а) 30. Апреля 2008 :: 05:32:
А план запроса можно как- нибудь сохранить кроме как PrintScreen?

Например, так:
QA-Tools-Options-Coonection properties-Set showplan_text

Или так:
Код
Выбрать все
SET SHOWPLAN_TEXT ON
GO

...

SET SHOWPLAN_TEXT OFF
GO
 



Спасибо, вот планы выполнения кому интересно
  

Plan.rar ( 1 KB | Загрузки )
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: План выполнения
Ответ #13 - 30. Апреля 2008 :: 07:30
Печать  
Nick писал(а) 30. Апреля 2008 :: 02:22:
Использую табличное поле

Второй план не попадает в индекс по ключу порядка. Если не ошибаюсь (ТП не пользую), для ТП это критично. Возможно, стоит просто задать ключ порядка из двух полей (descr, id1s).
  

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: План выполнения
Ответ #14 - 30. Апреля 2008 :: 07:48
Печать  
berezdetsky писал(а) 30. Апреля 2008 :: 07:30:
Nick писал(а) 30. Апреля 2008 :: 02:22:
Использую табличное поле

Второй план не попадает в индекс по ключу порядка. Если не ошибаюсь (ТП не пользую), для ТП это критично. Возможно, стоит просто задать ключ порядка из двух полей (descr, id1s).


Вообще то ключ порядка это: N.KeySort  = rtrim(descr) + id1s- это вычисляемый столбец, и индекс по нему есть
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать