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

Откуда: Украина
Сообщений: 81
Ну вот, оптимизировал-оптимизировал ... и дооптимизировался
Сейчас пытаюсь понять - бок из за моей оптимизации или из-за структуры данных(relationships в момент джоинов) ...

Помогите разобраться, плиз :).

В чем собственно говоря проблема : обновились данные в базе + прооптимизировались индексы ... в итоге запрос, который раньше выполнялся около 3 сек, сейчас работает аж за целые 2 минуты :)...

Шас буду курить execution plan ... буду признателен советам ... :)

итак, запрос - версия упрощенная
SELECT Count(1)
FROM
	Item i
	join [Scheme] s on s.ID=i.Scheme_ID and s.IsEnabled = 'TRUE'
	INNER JOIN Scheme_OptionList sol ON sol.Scheme_ID=s.ID AND sol.IsItemFilterable = 'TRUE' AND sol.IsEnabled = 'TRUE'
	INNER JOIN OptionList ol ON sol.[OptionList_ID] = ol.ID AND ol.IsEnabled = 'TRUE'			
	INNER JOIN OptionValue ov ON ov.[OptionList_ID] = ol.[ID] AND ov.IsEnabled = 'TRUE' AND ov.IsAvailableForSearch = 'TRUE' 			
	INNER JOIN ItemOption iop ON iop.[OptionValue_ID] = ov.[ID]	and iop.Item_ID=i.ID AND iop.IsAvailable = 'TRUE'

старые данные :
Item - 105549 rows
Scheme - 10
Scheme_OptionList - 84
OptionList - 89
OptionValue - 350
ItemOption - 993898

Count = 360037 ... Execution Time = 3 sec

новые данные :
Item - 52123 rows
Scheme - 15
Scheme_OptionList - 196
OptionList - 89\5
OptionValue - 3000
ItemOption - 367625

Count = 210158 ... Execution Time = 2 minutes

ExecutionPlan прикрепляю(для этих запросов) ... помогите пролить свет на это темное дело :)

К сообщению приложен файл (ExecutionPlan.zip - 8Kb) cкачать
29 окт 09, 19:48    [7858918]     Ответить | Цитировать Сообщить модератору
 Re: Дооптимизировался с индексами или ... как понять - проблема в данных или в "оптимизации"?  [new]
aleks2
Guest
1. Учись представлять планы в ТЕКСТОВОМ виде.

2. Тут и без плана можно сказать про индексы

a) на Item (ID, Scheme_ID)
b) на [Scheme] (IsEnabled, ID)
c) на Scheme_OptionList (IsEnabled, IsItemFilterable, Scheme_ID, OptionList_ID)
d) на OptionList (IsEnabled, ID)
e) на OptionValue (IsEnabled, IsAvailableForSearch, OptionList_ID)
e) на ItemOption (IsAvailable, Item_ID, OptionValue_ID)
30 окт 09, 07:33    [7859662]     Ответить | Цитировать Сообщить модератору
 Re: Дооптимизировался с индексами или ... как понять - проблема в данных или в "оптимизации"?  [new]
alexxUK
Member

Откуда: Украина
Сообщений: 81
по поводу тестового вида представления плана - если Вы про xml структуру, то мне она кажется менее читабельной :) ... в слкд рааз буду подкладывать 2 варианта.

добавил Индексов ...
перестроил некоторые таблицы с кастомными fill factor

DBCC DBREINDEX(Item, '', 70) 
DBCC DBREINDEX(Item_MetaSearch, '', 70) 
DBCC DBREINDEX(ItemOption, '', 80) 
DBCC DBREINDEX(OptionValue, '', 80) 
DBCC DBREINDEX([Scheme], '', 100) 
DBCC DBREINDEX(Scheme_OptionList, '', 100) 
DBCC DBREINDEX(OptionList, '', 100) 

почистил кеш для "чесности" эксперимента
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

в целом поиск с 2 минут прыгнул на диапазон 4-6 секунд, что уже не плохо ...
Сижу вот и втыкаю, неужели это индексы так я вчера заморочил :) ...
30 окт 09, 15:55    [7863362]     Ответить | Цитировать Сообщить модератору
 Re: Дооптимизировался с индексами или ... как понять - проблема в данных или в "оптимизации"?  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
alexxUK
Сижу вот и втыкаю, неужели это индексы так я вчера заморочил :) ...
Время выполнения зависит от распределения данных в таблице. Т.е. разные статистики столбцов - разные планы.
30 окт 09, 16:29    [7863661]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить