Sql-Server

我的觀點是否會減慢更新速度?

  • September 29, 2016

我有一個經常執行更新語句的 SQL Server 數據庫。我在活動監視器上看到這個更新語句觸發了 27 毫秒,我想改進它。

我檢查了執行計劃,我看到​​更新語句更新了視圖的索引: 在此處輸入圖像描述

更新查詢是這樣的:

UPDATE Code
   SET CommissioningFlag = @newCommFlagValue
               , Source = @source
               , UserName = @username
               , LastChange = CAST(SYSDATETIMEOFFSET() as nvarchar(50))
               , SentToNextLevel = 0
               , HelperCodeId = @helperCodeId
WHERE CodeId = @codeId

視圖突出顯示的腳本是:

CREATE VIEW dbo.PrintedCodesStatistics
WITH SCHEMABINDING
AS
   SELECT AggregationLevelId, COUNT_BIG(*) as CodesPrinted
   FROM dbo.Code
   WHERE   (CommissioningFlag != 255)
   GROUP BY AggregationLevelId

GO
CREATE UNIQUE CLUSTERED INDEX [IX_Printed_Statistics]
   ON [dbo].[PrintedCodesStatistics]([AggregationLevelId] ASC);

最後,Code表格腳本:

CREATE TABLE [dbo].[Code] (
   [CodeId]            INT            IDENTITY (1, 1) NOT NULL,
   [Serial]            NVARCHAR (20)  NOT NULL,
   [AggregationLevelId]  TINYINT      NOT NULL,
   [CommissioningFlag] TINYINT        NOT NULL,
   [... ]
   CONSTRAINT [PK_CODE] PRIMARY KEY CLUSTERED ([CodeId] ASC),
   CONSTRAINT [UC_CODE_SERIAL] UNIQUE NONCLUSTERED ([Serial] ASC)

視圖會減慢更新查詢的速度嗎?

索引視圖對寫入成本的貢獻與表上的正常索引一樣多,甚至更多。

每次寫入基表時,視圖上的索引都必須立即更新。

與正常索引一樣,有一個折衷:如果您的索引合理減慢並在讀取時顯著提升性能,則保留它。如果沒有,請擺脫它。

引用自:https://dba.stackexchange.com/questions/150985