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

Откуда: London, UK
Сообщений: 594
Интересует вопрос того как на техническом уровне реализованы в MS SQL Indexed views? Данные вьюшки при попытке выборки из нее тянуться непосредственно с таблиц, на которых она определена или же они все-таки как-то прекалькулируются и храняться в чем-то на подобии временной таблицы, которая постоянно рефрешится?

Кто знает - подскажите или дайте ссылку почитать, потому что сам ничего не смог найти на эту тему.
--
ВУЗы Украины
21 июн 12, 15:09    [12753618]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
BOL:
Индексированным называется материализованное представление. 
Это значит, что оно вычислено и сохранено.
21 июн 12, 15:19    [12753758]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
MaximFomenko,
в MS SQL Indexed views отличается от обычной view наличием кластерного индекса. Соответственно все данные хранятся в кластерном индексе, соответственно поддерживаются сервером автоматически.
При выполнение запроса к iv,если редакция enterprise,то данные автоматом берутся из индексированного представления,в других редакциях используется хинт Noexpand.
21 июн 12, 15:20    [12753775]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594
denis2710
MaximFomenko,
в MS SQL Indexed views отличается от обычной view наличием кластерного индекса. Соответственно все данные хранятся в кластерном индексе, соответственно поддерживаются сервером автоматически.
При выполнение запроса к iv,если редакция enterprise,то данные автоматом берутся из индексированного представления,в других редакциях используется хинт Noexpand.

кластерный индекс это все замечательно. Но допустим я не накладываю никаких фильтров. Т.е. просто есть просто обычная вьюшка:

CREATE VIEW MyView
AS
SELECT
...
FROM t1
INNER JOIN t2 ON ...
...
INNER JOIN t10 ON ...
GO


Но из-за большого количества джоинов и вычислений простой селект из нее без фильтров:

 SELECT * FROM MyView

сильно медленно работает.

Сможет ли мне помочь здесь индксированная вьюха?

Потому что я переопределил ее с SCHEMABINDING, создал кластерный индекс по PK, но при вычитывании всей таблицы он естественно никак не задействуется и полная выборка у меня никак не ускорилась. Это меня навело на подозрения о том, что целиком строки данных, никак не пресохраняются в чем-то на подобии временной таблицы. Это правда?
21 июн 12, 15:32    [12753917]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
bacalavr
Member

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

При выполнение запроса к iv,если редакция enterprise,то данные автоматом берутся из индексированного представления,в других редакциях используется хинт Noexpand.


может, ваше представление разворачивается до таблиц?
21 июн 12, 15:35    [12753941]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
MaximFomenko
denis2710
MaximFomenko,
в MS SQL Indexed views отличается от обычной view наличием кластерного индекса. Соответственно все данные хранятся в кластерном индексе, соответственно поддерживаются сервером автоматически.
При выполнение запроса к iv,если редакция enterprise,то данные автоматом берутся из индексированного представления,в других редакциях используется хинт Noexpand.

кластерный индекс это все замечательно. Но допустим я не накладываю никаких фильтров. Т.е. просто есть просто обычная вьюшка:

CREATE VIEW MyView
AS
SELECT
...
FROM t1
INNER JOIN t2 ON ...
...
INNER JOIN t10 ON ...
GO


Но из-за большого количества джоинов и вычислений простой селект из нее без фильтров:

 SELECT * FROM MyView

сильно медленно работает.

Сможет ли мне помочь здесь индксированная вьюха?

Потому что я переопределил ее с SCHEMABINDING, создал кластерный индекс по PK, но при вычитывании всей таблицы он естественно никак не задействуется и полная выборка у меня никак не ускорилась. Это меня навело на подозрения о том, что целиком строки данных, никак не пресохраняются в чем-то на подобии временной таблицы. Это правда?
Вся правда в плане выполнения вашего запроса.

Сообщение было отредактировано: 21 июн 12, 15:36
21 июн 12, 15:36    [12753943]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594
Гавриленко Сергей Алексеевич
Вся правда в плане выполнения вашего запроса.

План запроса прикрепил. Судя по нему 100% времени делается Clustered Index Scan по IV

К сообщению приложен файл (1.sqlplan - 8Kb) cкачать
21 июн 12, 15:44    [12754016]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594
Время выполнения полной выборки что на обычной вьюшке что на индексированной 15-16 секунд.
21 июн 12, 15:46    [12754035]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
MaximFomenko
Время выполнения полной выборки что на обычной вьюшке что на индексированной 15-16 секунд.

Что-то мне кажется,что это не тот случай, при котором имеет смысл использовать индексированное представление для увеличения производительности..
покажите скрипт на создание view
21 июн 12, 15:51    [12754079]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594
denis2710
MaximFomenko
Время выполнения полной выборки что на обычной вьюшке что на индексированной 15-16 секунд.

Что-то мне кажется,что это не тот случай, при котором имеет смысл использовать индексированное представление для увеличения производительности..
покажите скрипт на создание view


Оракловые Materialized Views в этом случае прекрасно справляются с повышением производительности этой выборки.
Сиквельные же Indexed Views прироста производительности никакого не дали. Потому и хочу разобраться как они работают на техническом уровне, чтобы граммотно ими пользоваться.

CREATE VIEW [dbo].[v_EducationInstanceLightList2]
WITH SCHEMABINDING 
AS

SELECT 
 [EI].[EducationInstanceID]
,[EI].[EducationInstanceTypeID]
,[EI].[IconID]
,[EIL].[LanguageId]
,[EIL].[EducationInstanceFullName]
,[EIL].[EducationInstanceShortName]
,CASE WHEN [EI].[ParentEducationInstanceID] IS NULL
           THEN [EIL].[ShortDescription]
           ELSE CONVERT(NVARCHAR(255),NULL)
 END AS [ShortDescription]
,[EI].[CityID]
,[EI].[RegionID]
,[Country].[CountryID]
,[CityLang].[CityName]
,[CL].[CountryName]
,0 AS [CommentCount]
,[EI].[ParentEducationInstanceID]
,[EIL].[Revision]
,[EIL].[AdditionInformation]
,[EIL].[AuthorUserID]
,[EIL].[EditUserID]
FROM dbo.EducationInstance AS [EI]
INNER JOIN dbo.City AS [City] ON ([City].[StatusRecordID] = [EI].[StatusRecordID] AND [EI].[CityID] = [City].[CityID])
INNER JOIN dbo.Region AS [Region] ON ([Region].[StatusRecordID] = [City].[StatusRecordID] AND [City].[RegionID] = [Region].[RegionID] AND [EI].[RegionID] = [Region].[RegionID])
INNER JOIN dbo.Country AS [Country] ON ([Country].[StatusRecordID] = [Region].[StatusRecordID] AND [Region].[CountryID] = [Country].[CountryID])
INNER JOIN dbo.EducationInstanceLanguage AS [EIL] ON ([EIL].[StatusRecordID] = [EI].[StatusRecordID] AND [EIL].[LatestApproved] = 1 AND [EI].[EducationInstanceID] = [EIL].[EducationInstanceId])
INNER JOIN dbo.CityLanguage AS [CityLang] ON ([CityLang].[LanguageId] = [EIL].[LanguageId] AND [CityLang].[CityId] = [City].[CityID])
INNER JOIN dbo.CountryLanguage AS [CL] ON ([CL].[LanguageId] = [EIL].[LanguageId] AND [CL].[CountryId] = [Country].[CountryID])
WHERE [EI].[StatusRecordID] = dbo.f_StatusRecord_SimpleRecord()
21 июн 12, 15:57    [12754133]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Покажите актуальные планы выборки из view и просто join'а.
21 июн 12, 16:01    [12754167]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
MaximFomenko
План запроса прикрепил. Судя по нему 100% времени делается Clustered Index Scan по IV
А какого еще плана вы ожидали для запроса
SELECT * FROM MyView
?
21 июн 12, 16:04    [12754205]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594
invm
MaximFomenko
План запроса прикрепил. Судя по нему 100% времени делается Clustered Index Scan по IV
А какого еще плана вы ожидали для запроса
SELECT * FROM MyView
?

именно такого, только я ожидаю что если Indexed View реализовано как пресохраненная временная таблица, то все 6000 строк будут выбираться практически моментально, а не 15 секунд.
21 июн 12, 16:07    [12754228]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594
Гавриленко Сергей Алексеевич
Покажите актуальные планы выборки из view и просто join'а.

Первый план выложен выше, а 2-й план выкладываю

К сообщению приложен файл (From IV without NOEXPAND.sqlplan - 62Kb) cкачать
21 июн 12, 16:10    [12754244]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
MaximFomenko
invm
пропущено...
А какого еще плана вы ожидали для запроса
SELECT * FROM MyView
?

именно такого, только я ожидаю что если Indexed View реализовано как пресохраненная временная таблица, то все 6000 строк будут выбираться практически моментально, а не 15 секунд.
Это у вас по estimated плану шесть тысяч. А вы реальный покажите, может там шесть миллионов.
21 июн 12, 16:10    [12754252]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594
Гавриленко Сергей Алексеевич
Это у вас по estimated плану шесть тысяч. А вы реальный покажите, может там шесть миллионов.

Нет, 6000 это то что реально отдает запрос если его выполнить.
21 июн 12, 16:14    [12754273]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
MaximFomenko,
имхо нафигне нужно тут iv.
...
WHERE [EI].[StatusRecordID] = dbo.f_StatusRecord_SimpleRecord()

избавитесь от функции.
21 июн 12, 16:17    [12754297]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594
denis2710
MaximFomenko,
имхо нафигне нужно тут iv.
...
WHERE [EI].[StatusRecordID] = dbo.f_StatusRecord_SimpleRecord()

избавитесь от функции.

Если вместо функции просто вписать статус код то работает точно те же 15 секунд.

К сообщению приложен файл (Without function.sqlplan - 58Kb) cкачать
21 июн 12, 16:19    [12754315]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
komrad
Member

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

select @@version
21 июн 12, 16:23    [12754343]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
MaximFomenko,
Вам религия не позваляет выкладывать actual,а не estimated plan?
21 июн 12, 16:25    [12754353]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594
komrad
MaximFomenko,

select @@version

Microsoft SQL Server 2005 - 9.00.5292.00 (Intel X86) Apr 13 2011 15:56:31 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
21 июн 12, 17:11    [12754685]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594
denis2710
MaximFomenko,
Вам религия не позваляет выкладывать actual,а не estimated plan?

Actual Execution Plan of the query behind the IV
21 июн 12, 17:21    [12754773]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594


К сообщению приложен файл (Actual Plan of Joins.sqlplan - 67Kb) cкачать
21 июн 12, 17:22    [12754780]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
MaximFomenko
Member

Откуда: London, UK
Сообщений: 594


К сообщению приложен файл (Actual Plan of IV.sqlplan - 9Kb) cкачать
21 июн 12, 17:22    [12754783]     Ответить | Цитировать Сообщить модератору
 Re: Как работают indexed views на уровне технической реализации в MS SQL?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
имхо тут все дело в размере строки и соответственно в размере набора данных
21 июн 12, 17:29    [12754852]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить