Published on

November 30, 2010

Понимание использования индексов в представлениях SQL Server

Представления являются широко используемым концептом в SQL Server, но часто существуют неправильные представления о их ограничениях и о том, как они взаимодействуют с индексами. В предыдущей статье я обсудил ограничения представлений и показал, что запросы на представления без индекса на базовой таблице не используют представление. В этой статье я рассмотрю сценарий, когда индекс на представлении может быть использован.

Давайте пройдемся по шагам, чтобы увидеть, как можно использовать индекс, созданный на представлении:

  1. Создать таблицу
  2. Создать представление
  3. Создать индекс на представлении
  4. Написать оператор SELECT с ORDER BY на представлении

Вот пример, как можно реализовать эти шаги:

USE tempdb
GO

IF EXISTS (SELECT * FROM sys.views WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[SampleView]'))
    DROP VIEW [dbo].[SampleView]
GO

IF EXISTS (SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[mySampleTable]') AND TYPE IN (N'U'))
    DROP TABLE [dbo].[mySampleTable]
GO

-- Создать SampleTable
CREATE TABLE mySampleTable (
    ID1 INT,
    ID2 INT,
    SomeData VARCHAR(100)
)

INSERT INTO mySampleTable (ID1, ID2, SomeData)
SELECT TOP 100000
    ROW_NUMBER() OVER (ORDER BY o1.name),
    ROW_NUMBER() OVER (ORDER BY o2.name),
    o2.name
FROM sys.all_objects o1
CROSS JOIN sys.all_objects o2
GO

-- Создать представление
CREATE VIEW SampleView WITH SCHEMABINDING AS
SELECT ID1, ID2, SomeData
FROM dbo.mySampleTable
GO

-- Создать индекс на представлении
CREATE UNIQUE CLUSTERED INDEX [IX_ViewSample] ON [dbo].[SampleView] (ID2 ASC)
GO

-- Выбрать из представления
SELECT ID1, ID2, SomeData
FROM SampleView
ORDER BY ID2

Когда мы проверяем план выполнения для этого запроса, мы видим, что созданный на представлении индекс используется. Клауза ORDER BY использует индекс, что приводит к улучшению производительности. Это демонстрирует, как индекс на представлении может быть полезен.

Если вас интересует более подробное изучение ограничений представлений, я рекомендую прочитать мою предыдущую серию статей на эту тему: “SQL SERVER – Ограничения представлений – одиннадцать и более…”. Понимание этих ограничений поможет вам принимать обоснованные решения при работе с представлениями в вашей среде SQL Server.

Спасибо за чтение и оставайтесь на связи для получения больше статей о концепциях и bewt практиках SQL Server!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.