首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 視圖進階應用:參數化視圖與索引視圖效能優化

     編輯:關於SqlServer

視圖三大類型與應用場景

1. 標準視圖

基本 CREATE VIEW,封裝常用查詢、簡化權限控管、隱藏資料表結構。語法簡單,此處不贅述。

2. 參數化視圖 (內嵌資料表值函數)

標準視圖不支援參數,利用 內嵌資料表值函數 實現「帶參數的視圖」:

CREATE FUNCTION fnTestView (@m_id INT)
RETURNS TABLE
AS
RETURN (
    SELECT * FROM 視圖名稱 WHERE 條件 = @m_id
)

使用方式如同資料表:

SELECT * FROM fnTestView(2)

優點:可在 FROM 子句中直接引用、查詢計畫內嵌優化、參數化執行計畫重用。

3. 索引視圖 (具體化視圖)

在視圖上建立 唯一叢集索引,SQL Server 將視圖結果實體化儲存,查詢時直接讀取索引而非重新計算,多表 JOIN 場景效能大幅提升。

索引視圖建立範例

CREATE VIEW dbo.vtUsers
WITH SCHEMABINDING
AS
SELECT dbo.tUsers.userid, dbo.tUsers.username, dbo.tUsers.passWord,
    dbo.tUsers.question, dbo.tUsers.answer, dbo.tUsers.email, dbo.tUsers.realname,
    dbo.tUsers.sex, dbo.tUsers.birthday, dbo.tUsers.country, dbo.tUsers.city,
    dbo.tUsers.address, dbo.tUsers.zip, dbo.tUsers.tele, dbo.tUsers.exdate,
    dbo.tUsers.totalfund, dbo.tUsers.ordertotal, dbo.tUsers.jifen, dbo.tUsers.pid,
    dbo.tUsers.agentid, dbo.tUsers.agentid2, dbo.tUsers.agentid3, dbo.tUsers.status,
    dbo.tUsers.checkmod, dbo.tUsers.account, dbo.tUsers.bank, dbo.tUsers.logip
FROM dbo.tUsers
WHERE dbo.tUsers.status = 1  -- 篩選條件固定

-- 建立唯一叢集索引 (具體化)
CREATE UNIQUE CLUSTERED INDEX IX_vtUsers_userid ON dbo.vtUsers (userid)

索引視圖關鍵限制 (必須滿足)

  • WITH SCHEMABINDING 綁定結構描述
  • 不可使用 SELECT *,需明確列出欄位
  • 不可參考其他資料庫物件
  • 彙總函數需搭配 COUNT_BIG(*)
  • 不可使用 OUTER JOIN、DISTINCT、UNION、子查詢等
  • 基底資料表需有唯一叢集索引

效能效益

複雜多表 JOIN、彙總報表、頻繁查詢且資料變動較少的場景,索引視圖可將查詢時間從秒級降至毫秒級。維護成本為 DML 觸發時同步更新索引,適合「讀多寫少」業務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved