Published on

March 21, 2018

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

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

Давайте начнем с создания хранимой процедуры, которая использует представление, которое мы хотим проанализировать. В качестве примера мы будем использовать базу данных WideWorldImporters. Выполните следующий код в базе данных WideWorldImporters:

USE [WideWorldImporters]
GO

-- Шаг 1: Создание хранимой процедуры
CREATE PROCEDURE Sel_From_View
AS
SELECT top 100 WC.[CustomerID]
      ,WC.[CustomerName]
      ,WC.[CustomerCategoryName]
      ,WC.[WebsiteURL]
FROM [WideWorldImporters].[Website].[Customers] WC
GO

-- Шаг 2: Выполнение хранимой процедуры 50 раз
EXEC Sel_From_View
GO 50

-- Шаг 3: Использование представления в запросе ad-hoc и его выполнение 5 раз
SELECT WC.[CustomerID]
      ,WC.[CustomerName]
      ,WC.[CustomerCategoryName]
      ,WC.[WebsiteURL]
  ,C.AccountOpenedDate 
FROM [WideWorldImporters].[Website].[Customers] WC
INNER JOIN Sales.Customers C ON C.CustomerID = WC.CustomerID
GO 5

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

SELECT  
a.execution_count ,
OBJECT_NAME(objectid, b.dbid) as object_name,
query_text = SUBSTRING( 
b.text, a.statement_start_offset/2, 
(   CASE WHEN a.statement_end_offset = -1 
THEN LEN(CONVERT(nvarchar(MAX), b.text)) * 2 
ELSE a.statement_end_offset 
END - a.statement_start_offset
 )/2
) ,
dbname = DB_NAME(b.dbid)
FROM sys.dm_exec_query_stats a 
CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) AS b 
WHERE SUBSTRING( b.text,  a.statement_start_offset/2,   
( CASE  WHEN a.statement_end_offset = -1  THEN LEN(CONVERT(NVARCHAR(MAX), b.text)) * 2 
ELSE a.statement_end_offset END - a.statement_start_offset
 )/2
)  LIKE '%Customers%'

Результат вышеприведенного запроса покажет использование представления. Он покажет, используется ли представление хранимыми процедурами или запросами ad-hoc.

Важно отметить, что этот процесс покажет только текущее использование представления из кэша плана, а не прошлое использование.

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

Надеюсь, вы найдете эту статью полезной, когда вам зададут такой же вопрос.

Следите за новыми советами и трюками по 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.