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

Откуда:
Сообщений: 338
SQL Сервер:
Microsoft SQL Server 2005 - 9.00.3042.00 (X64)   Feb 10 2007 00:59:02   Copyright (c) 1988-2005 Microsoft Corporation  Standard Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) 


Создаю индексированное представление:

USE [ExcelData]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[v_Distributors]
WITH SCHEMABINDING
AS
    SELECT	[config_Дистрибьютор_код]
			,[config_Дистрибьютор_наименование] 
			,COUNT_BIG(*) AS COUNT
	FROM	[dbo].[f_sales_xls]
	GROUP BY 
			[config_Дистрибьютор_код]
			,[config_Дистрибьютор_наименование];
GO
--Create an index on the view.
CREATE UNIQUE CLUSTERED INDEX IDX_Distributor 
    ON [dbo].[v_Distributors] ([config_Дистрибьютор_код], [config_Дистрибьютор_наименование]);

GO


Делаю select:
SELECT	[config_Дистрибьютор_код]
		,[config_Дистрибьютор_наименование]
FROM	[ExcelData].[dbo].[v_Distributors]


Во первых время выполнения select из [dbo].[v_Distributors], такое же как если бы я выполнила select из таблицы которую использует IV.
Смотрю план запроса, а там используется индекс который определен на той самой таблице [dbo].[f_sales_xls] на которой построена IV, а не индекс IV.
Получается что IV вообще не работает, она выдает мне тот же самый результат что и запрос без iV.
Что я делаю не так?

Спасибо!
5 окт 12, 18:21    [13275953]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление - скорость выборки  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Для Standard Edition
SELECT	[config_Дистрибьютор_код]
		,[config_Дистрибьютор_наименование]
FROM	[ExcelData].[dbo].[v_Distributors] with(noexpand)
5 окт 12, 18:32    [13276008]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление - скорость выборки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
byverka
Получается что IV вообще не работает, она выдает мне тот же самый результат что и запрос без iV.
Что я делаю не так?
NOEXPAND

BOL
Индексированные представления можно создавать в любом выпуске SQL Server. В SQL Server Enterprise оптимизатор запросов учитывает индексированные представления автоматически. Чтобы использовать индексированные представления в любых других выпусках, следует применить табличную подсказку NOEXPAND.
5 окт 12, 18:33    [13276012]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление - скорость выборки  [new]
byverka
Member

Откуда:
Сообщений: 338
Тему закрываю, все решилось добавлением хинта:
SELECT	[config_Дистрибьютор_код]
		,[config_Дистрибьютор_наименование]
FROM	[ExcelData].[dbo].[v_Distributors] WITH (NOEXPAND, INDEX(IDX_Distributor)) 


Главное хоть бы в одном месте было написано, что IV может вообще не пользоваться своим индексом, а полезет в таблицу из ее определения.
5 окт 12, 18:34    [13276017]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление - скорость выборки  [new]
byverka
Member

Откуда:
Сообщений: 338
Спасибо за советы, нашла сама!
5 окт 12, 18:35    [13276022]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление - скорость выборки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
byverka
Главное хоть бы в одном месте было написано, что IV может вообще не пользоваться своим индексом, а полезет в таблицу из ее определения.
В хелпе есть целая статья на эту тему: Resolving Indexes on Views ( ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_0evalplan/html/430593ce-5dec-48d5-86ed-78388091880a.htm )
5 окт 12, 18:39    [13276040]     Ответить | Цитировать Сообщить модератору
 Re: Индексированное представление - скорость выборки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
byverka
Главное хоть бы в одном месте было написано, что IV может вообще не пользоваться своим индексом, а полезет в таблицу из ее определения.
Да, там написано.

INDEX(IDX_Distributor) писать вредно, вдруг название поменяется? Пишите просто NOEXPAND
5 окт 12, 18:44    [13276062]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить