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

Откуда: Moscow
Сообщений: 610
Доброго времени суток!

СУБД: SQL Server 2008R2 SP1 X64
есть запрос:
+


     select top 18000000 O.ID  
into #A 
from (select O.ID, O.CountryID, O.MealID, O.PlaceID, O.RoomID,O.CityFromID 
        from AlphaTUI.dbo.SPO S  
        left join AlphaTUI.dbo.SpoOffer O on S.ID = O.SpoID  

        where    Avia = 1 and 
                Price >= 100 and 
                Night <= 14 and 
                MealID <> 6 and 
                Betta = 0 and 
                O.HotelID in (
                    select AlphaID 
                    from Betta.dbo.RefHotel 
                    where AgSource = 2 and 
                                YeesID > 0 and 
                                [Status] = 1)) as O 

where O.CountryID in (select AlphaID 
                        from Betta.dbo.RefCountry 
                        where AgSource = 2 and 
                        YeesID > 0 and 
                        [Status] = 1)  
and O.MealID in (select AlphaID 
                    from Betta.dbo.RefMeal 
                    where AgSource = 2 and 
                            YeesID > 0 
                            and [Status] = 1) 
and O.PlaceID in (select AlphaID 
                    from Betta.dbo.RefPlace P 
                    where AgSource = 2 and 
                    YeesID > 0 and 
                    [Status] = 1 ) 
and O.RoomID in (select AlphaID 
                from Betta.dbo.RefRoom 
                where AgSource = 2 and 
                YeesID > 0 and 
                [Status] = 1)  
and O.CityFromID in (select AlphaID from Betta.dbo.RefCountryCity where AgSource = 2 and YeesID > 0 and [Status] = 1) 



В запросе участвует большая таблица таблица SpoOffer(0,5 млрд записей), по которой после выполнения этого запроса активно идет апдейт и удаление. При выполнении этого запроса оптимизатор советует создать индекс:

+

USE [AlphaTUI]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[SpoOffer] ([HotelID],[Avia],[Betta],[Night],[Price])
INCLUDE ([ID],[SpoID],[CityFromID],[MealID],[PlaceID],[RoomID],[CountryID])
GO



Данный индекс хорош, на селект, но слишком снижает производительность операций ввода\вывода. Подскажите какой индекс подобрать, что бы был приемлемый компромисс.

К сообщению приложен файл (1.sqlplan - 141Kb) cкачать
5 мар 13, 11:20    [14012901]     Ответить | Цитировать Сообщить модератору
 Re: Индекс под запрос  [new]
Гость333
Member

Откуда:
Сообщений: 3683
andrew shalaev
Данный индекс хорош, на селект

То есть вы построили индекс и сравнили время/планы выполнения?
5 мар 13, 11:42    [14013045]     Ответить | Цитировать Сообщить модератору
 Re: Индекс под запрос  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гость333,
да, протестировал, операции ввода\вывода значительно увеличились во времени.
5 мар 13, 11:45    [14013088]     Ответить | Цитировать Сообщить модератору
 Re: Индекс под запрос  [new]
Гость333
Member

Откуда:
Сообщений: 3683
andrew shalaev,

А план сохранился для селекта с построенным индексом?
5 мар 13, 11:47    [14013105]     Ответить | Цитировать Сообщить модератору
 Re: Индекс под запрос  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гость333,

да, выкладываю

К сообщению приложен файл (2.sqlplan - 57Kb) cкачать
5 мар 13, 11:58    [14013247]     Ответить | Цитировать Сообщить модератору
 Re: Индекс под запрос  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
andrew shalaev,

Вы б на Exists какие-нибудь все свои In-ы переписали б штоле...
5 мар 13, 12:01    [14013281]     Ответить | Цитировать Сообщить модератору
 Re: Индекс под запрос  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34658
andrew shalaev
Гость333,
да, протестировал, операции ввода\вывода значительно увеличились во времени.


Это как? Время io на одной и той же системе — величина постоянная.
5 мар 13, 12:02    [14013290]     Ответить | Цитировать Сообщить модератору
 Re: Индекс под запрос  [new]
Гость333
Member

Откуда:
Сообщений: 3683
andrew shalaev
Гость333,

да, выкладываю

Вроде в этом плане другой индекс? :-) С первым столбцом CityFromID?
5 мар 13, 12:13    [14013397]     Ответить | Цитировать Сообщить модератору
 Re: Индекс под запрос  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
MasterZiv,

При update и delete так же удаляются и обновляются индексы, соответственно, чем индексов больше, тем медленнее происходят операции вставки и удаления.
5 мар 13, 12:14    [14013408]     Ответить | Цитировать Сообщить модератору
 Re: Индекс под запрос  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гость333,
Да, ошибся еще раз:

Текст запроса с использованием только кластерного индекса:
+

 select top 18000000 O.ID  
into #A 
from (select O.ID, O.CountryID, O.MealID, O.PlaceID, O.RoomID,O.CityFromID 
        from AlphaTUI.dbo.SPO S  
        left join AlphaTUI.dbo.SpoOffer O with (index = PK_SpoOffer) on S.ID = O.SpoID  

        where    Avia = 1 and 
                Price >= 100 and 
                Night <= 14 and 
                MealID <> 6 and 
                Betta = 0 and 
                O.HotelID in (
                    select AlphaID 
                    from Betta.dbo.RefHotel 
                    where AgSource = 2 and 
                                YeesID > 0 and 
                                [Status] = 1)) as O 

where O.CountryID in (select AlphaID 
                        from Betta.dbo.RefCountry 
                        where AgSource = 2 and 
                        YeesID > 0 and 
                        [Status] = 1)  
and O.MealID in (select AlphaID 
                    from Betta.dbo.RefMeal 
                    where AgSource = 2 and 
                            YeesID > 0 
                            and [Status] = 1) 
and O.PlaceID in (select AlphaID 
                    from Betta.dbo.RefPlace P 
                    where AgSource = 2 and 
                    YeesID > 0 and 
                    [Status] = 1 ) 
and O.RoomID in (select AlphaID 
                from Betta.dbo.RefRoom 
                where AgSource = 2 and 
                YeesID > 0 and 
                [Status] = 1)  
and O.CityFromID in (select AlphaID from Betta.dbo.RefCountryCity where AgSource = 2 and YeesID > 0 and [Status] = 1) 



и его план запроса во вложении

К сообщению приложен файл (3.sqlplan - 98Kb) cкачать
5 мар 13, 12:31    [14013550]     Ответить | Цитировать Сообщить модератору
 Re: Индекс под запрос  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
andrew shalaev,

Этот же запрос уже без хинта

К сообщению приложен файл (4.sqlplan - 57Kb) cкачать
5 мар 13, 12:31    [14013556]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить