Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
Всем доброго дня!!!
Помогите пожалуйста разобраться,
Исходные данные:
сам запрос
declare @id_versh int, @plyear int
set @id_versh = 128
set @plyear = 2017
select
       b.id_versh
	, b.[Plyear]
	, b.[id_templateEtap] 
	, b.[NewOil]
	, b.[NumbOilRig]					
	, b.[IndexNumber]
    , c.[pornline]
    , c.id_nametable
    , b.[id_subsbj]
	, a.[id_tmplt]
	, a.[id_typework]
	, a.[id_itempaid]
	, a.[limitDateFrom]
	, a.[limitDateUpTo]
	
	          
	, a.[id_agent]
	, a.[id_sch]
	, a.[id_ssp]
	, a.[id_ssp1]
	, a.[id_show]
	, a.[nameOkras]
	, a.[id_nmTamplate]
	, a.[ValueTime]
	, a.[CostEstimation]
	, a.[CostPerc]
	, a.[CostMoney]
	, a.[limitFromMeter]
	, a.[limitUpToMeter]
	
	, a.[ValueAmount]
	, a.[Norm]
	, a.[koeff]
	, a.[NameSumm]
	, a.[CostTime]
	, a.[id_schfact]
	, a.[id_tmpltTemp] 
	, d.[YearSmety]
	, a.[OtherVyb]
	, a.id_edizm
	
from
  T49 b
  left join
	 T118 d with(index(IX_T118))
		on
		   isnull(b.[id_templateEtap], 0) = isnull(d.[id_nmtamplate], 0)	      	   
    left join
    T115 a with (index(IX_id_templateEtap))
     on
      isnull(b.[id_templateEtap], 0) = isnull(a.[id_nmtamplate], 0)
   left join 
     T107 c 
		on
	 isnull(a.[id_itempaid], 0)  =  isnull(c.[id_itempaid], 0)  
where 
	isnull(a.[id_itempaid],0) > 0 and (isnull(c.[id_nametable],0) = 2 or isnull(c.[id_nametable],0) = 8)
and 
    id_versh = @id_versh and plyear = @plyear


план выполнения приложил.
В запросе участвуют 4 таблицы Т49,Т118,Т115,Т107
Задача:
Нужно выбрать из Т49 (всего строк 97040, после выборки 604) выбрать набор строк в Т115 (общее кол-во строк 17 760 834, после выборки 42 148) по соответствию строк, по полям isnull(b.[id_templateEtap], 0) = isnull(a.[id_nmtamplate], 0). Таблица Т115 содержит уникальный набор записей соответствующий признаку [id_nmtamplate].
Ещё одним ограничением является выборка по условию id_versh = @id_versh and plyear = @plyear и набор соответствия строкам в таблице Т107.
Таблицы Т118 используется как информационная.
Что меня смущает.
1. В плане выполнения выделил жёлтым. Непонятно почему оптимизатор начинает искать что-то в кластерном индексе таблицы Т115, хотя его в условиях нигде нет. Он судя по плану берёт на себя 63%.
Пробовал в select-е убрать запрашиваемые поля для таблицы T115 a. план тот же самый.
а в строке таблицы свойств для цикла Передать пишет [IsBaseRow1003] IS NULL. приложу картинку следом.

Если есть какие нибудь соображения, подскажите почему так?!

К сообщению приложен файл. Размер - 50Kb
11 май 17, 11:02    [20471682]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36905
saley
Непонятно почему оптимизатор начинает искать что-то в кластерном индексе таблицы Т115, хотя его в условиях нигде нет.
Ну так наведите мышку на этот лукап, и узнаете, что он там ищет.
11 май 17, 11:04    [20471692]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
прилагаю картинку свойств для цикла

К сообщению приложен файл. Размер - 112Kb
11 май 17, 11:04    [20471693]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36905
Вы sqlplan-файлик выложите, зачем этот миллион скриншотов?
11 май 17, 11:05    [20471702]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
Гавриленко Сергей Алексеевич
saley
Непонятно почему оптимизатор начинает искать что-то в кластерном индексе таблицы Т115, хотя его в условиях нигде нет.
Ну так наведите мышку на этот лукап, и узнаете, что он там ищет.

В то то и дело зачем он это делает если в принципе в условиях выборки его нигде нет
11 май 17, 11:06    [20471708]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36905
saley
Гавриленко Сергей Алексеевич
пропущено...
Ну так наведите мышку на этот лукап, и узнаете, что он там ищет.

В то то и дело зачем он это делает если в принципе в условиях выборки его нигде нет
Вы ответы читать пробовали? Я вам написал, как узнать, зачем.
11 май 17, 11:07    [20471714]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
сам план

К сообщению приложен файл (план.sqlplan - 55Kb) cкачать
11 май 17, 11:07    [20471720]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
saley
Гавриленко Сергей Алексеевич
пропущено...
Ну так наведите мышку на этот лукап, и узнаете, что он там ищет.

В то то и дело зачем он это делает если в принципе в условиях выборки его нигде нет


IX_T118 что в нём?
не хватает полей, скорее всего подтягивает d.[YearSmety]
11 май 17, 11:08    [20471723]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
TaPaK,

то я таблицей промахнулся, но суть таже
11 май 17, 11:09    [20471735]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
TaPaK,

с вашего IX_id_templateEtap вытягивает 3 поля и ещё 10+ лукапом, зачем вообще прибит такой индекс?
11 май 17, 11:10    [20471739]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20491
saley, вот Вы привязываете таблицу T107 (c) по условию isnull(a.[id_itempaid], 0) = isnull(c.[id_itempaid], 0), а потом делаете отбор по isnull(a.[id_itempaid], 0) и требуете значение больше нуля. Т.е. все null-записи будут отсеяны... а зачем тогда ЛЕВОЕ связывание? по той же причине и T115 (a) нет смысла привязывать левым...
11 май 17, 11:14    [20471759]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Akina,

автор
потом делаете отбор по isnull(a.[id_itempaid], 0) и требуете значение больше нуля.

бывают и значения меньше нуля, вообщем-то

автор
. а зачем тогда ЛЕВОЕ связывание? по той же причине и T115 (a) нет смысла привязывать левым...

с LEFT бывает и выгоднее
11 май 17, 11:19    [20471782]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
TaPaK
TaPaK,

с вашего IX_id_templateEtap вытягивает 3 поля и ещё 10+ лукапом, зачем вообще прибит такой индекс?

Скажите, а 10+ надо было включать в индекс как включённые столбцы?
11 май 17, 11:19    [20471784]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
saley
TaPaK
TaPaK,

с вашего IX_id_templateEtap вытягивает 3 поля и ещё 10+ лукапом, зачем вообще прибит такой индекс?

Скажите, а 10+ надо было включать в индекс как включённые столбцы?

а вопрос про прибитый индекс вы пропустили?
11 май 17, 11:19    [20471788]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
Akina
saley, вот Вы привязываете таблицу T107 (c) по условию isnull(a.[id_itempaid], 0) = isnull(c.[id_itempaid], 0), а потом делаете отбор по isnull(a.[id_itempaid], 0) и требуете значение больше нуля. Т.е. все null-записи будут отсеяны... а зачем тогда ЛЕВОЕ связывание? по той же причине и T115 (a) нет смысла привязывать левым...

Для уменьшения количества строк в выборке для Т115.
11 май 17, 11:26    [20471832]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
TaPaK
saley
пропущено...

Скажите, а 10+ надо было включать в индекс как включённые столбцы?

а вопрос про прибитый индекс вы пропустили?

Создал его по совету SQL-оптимизатора.
11 май 17, 11:28    [20471844]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
saley
TaPaK
пропущено...

а вопрос про прибитый индекс вы пропустили?

Создал его по совету SQL-оптимизатора.

врёте, он такого бы не предложил.
11 май 17, 11:28    [20471848]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
А чем он плох?
11 май 17, 11:29    [20471854]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
saley
А чем он плох?


автор
Непонятно почему оптимизатор начинает искать что-то в кластерном индексе таблицы Т115, хотя его в условиях нигде нет
11 май 17, 11:30    [20471867]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
TaPaK
saley
пропущено...

Создал его по совету SQL-оптимизатора.

врёте, он такого бы не предложил.

Хочу с Вами не согласится, в процессе работы БД он мне для оптимизации разных запросов ещё пять штук предложил создать. Конечно могу просто заблуждаться.
11 май 17, 11:40    [20471929]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
TaPaK
saley
А чем он плох?


автор
Непонятно почему оптимизатор начинает искать что-то в кластерном индексе таблицы Т115, хотя его в условиях нигде нет

Хотите сказать что [id_tmplt] надо исключить из индекса?
11 май 17, 11:42    [20471934]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7663
saley,

он ищет не что-то, а недостающие поля. А что, медленно ищет или в чём проблема? Мало ли, что 63%, Вам шашечки или ехать?
11 май 17, 11:45    [20471953]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
saley
TaPaK
пропущено...


пропущено...

Хотите сказать что [id_tmplt] надо исключить из индекса?

уберите вообще прибивание индекса, для начала
11 май 17, 11:55    [20472008]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
Владислав Колосов
saley,

он ищет не что-то, а недостающие поля. А что, медленно ищет или в чём проблема? Мало ли, что 63%, Вам шашечки или ехать?

, а недостающие поля это 10+ или id_tmlt? В каком месте плана это видно?
Проблема в производительности, на основе этой View привязывается ещё одна таблица с расчётами по полю id_tmlt и в итоге получаю 13- 12 секунд на общую выборку. А данные постоянно пополняются, соответственно и скорость со временем падает. Пытаюсь ещё раз перетрясти всё.
11 май 17, 13:05    [20472306]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
saley
Member

Откуда:
Сообщений: 615
TaPaK
saley
пропущено...

Хотите сказать что [id_tmplt] надо исключить из индекса?

уберите вообще прибивание индекса, для начала

убирая этот индекс он сам лезет в другой и работать начинает медленней.
11 май 17, 13:08    [20472318]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить