Если вы работаете над оптимизацией 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!