国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

使用索引的視可以增加程序的性能

2024-07-21 02:39:19
字體:
供稿:網(wǎng)友

  在一個視建立獨特的簇索引可以有效地增加視的性能,因為此時視變?yōu)榭梢源鎯υ跀?shù)據(jù)庫中,這正和表存儲的方式相似。
  
  一個標(biāo)準(zhǔn)的視一旦被動態(tài)地建立,就可能有很多的視操作。使用一個索引的視,操作結(jié)果可以保存,而且,假如數(shù)據(jù)存儲發(fā)生丟失,你還可以在性能保護(hù)中找回。
  
  在一個視上建立第一個索引必須是唯一的索引號。除此之外,索引也從屬于表。這些表和視以及索引本身一樣,必須在同一數(shù)據(jù)庫中建立。
  
  低于SQL Server 2000版本的數(shù)據(jù)庫只能建立表的索引。然而SQL Server 2000可以在視上建立索引。SQL Server 2000通過存儲計算查詢結(jié)果,一旦視的數(shù)據(jù)改變,索引也隨之改變這樣的方式來實現(xiàn)的。
  
  視有其他的限制,包括的內(nèi)容如下:
  
  在索引視的SELECT中不能包含有其他的視,行設(shè)置函數(shù),嵌套函數(shù)等。同樣,在索引視的SELECT中不能包含有要害詞TOP, DISTINCT, COMPUTE, HAVING, 和/或 UNION。SELECT聲明也不能包含有子查詢。
  
  SELECT表不能包含有星號(*)或其他的通配符,也不能包含有DISTINCT, COUNT(*), COUNT(<eXPression>),以及表的計算列數(shù)等。
  
  在任何連接的表中不能包含OUTER JOIN操作。
  
  在查找過程中不能包含子查詢或CONTAINS或 FREETEXT操作。
  
  假如視定義包含一個GROUP BY語句,所有的分組列必須出現(xiàn)在視的SELECT表中。這些列也只能是CREATE UNIQUE CLUSTERED INDEX語句中的列。
  
  除此之外,為了使用索引的視你必須進(jìn)行一些必要的系統(tǒng)設(shè)置。
  
  NUMERIC_ROUNDABORT設(shè)置為ON。這能夠使視圓整列或存儲變量的精確結(jié)果。
  
  ANSI_PADDING控制列存儲的方式。
  
  ANSI_WARNINGS指定不同錯誤情況下的SQL-92標(biāo)準(zhǔn)行為。
  
  CONCAT_NULL_YIELDS_NULL決定連接結(jié)果是處理為null還是空的字符串。
  
  ARITHABORT在查詢過程中出現(xiàn)溢出或被零整除的錯誤的時候終止查詢。
  
  QUOTED_IDENTIFIER能夠使SQL Server遵循有關(guān)引用符號標(biāo)識符和文字字符串的SQL-92規(guī)則。
  
  以下的范例將建立一個視,然后對視建立索引,最后使用這個索引的視進(jìn)行查詢。首先,調(diào)整系統(tǒng)設(shè)置以滿足索引視能夠工作。
  
  USE Northwind
  GO
  SET NUMERIC_ROUNDABORT OFF
  GO
  SET
  ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,
  ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS ON
  GO
  
  然后,我們建立一個名為V1的視,這一視可以生成columns Revenue, OrderDate, 和PRodUCtID.
  
  CREATE  VIEW V1
  WITH  SCHEMABINDING
  AS
    SELECT SUM(UnitPrice*Quantity*(1.00-Discount)) AS Revenue,
  OrderDate, ProductID, COUNT_BIG(*) AS COUNT
    FROM  dbo.[Order Details] od, dbo.Orders o
    WHERE  od.OrderID=o.OrderID
    GROUP BY  OrderDate, ProductID
  GO
  
  接著,我們建立V1的唯一簇索引。
  
  CREATE UNIQUE CLUSTERED INDEX IV1 ON V1 (OrderDate, ProductID)
  GO
  
  最后,我們建立一個能夠使用索引視而不是動態(tài)視的查詢。
  
  SELECT SUM(UnitPrice*Quantity*(1.00-Discount)) AS Rev, OrderDate,
   ProductID
  FROM  dbo.[Order Details] od, dbo.Orders o
  WHERE  od.OrderID=o.OrderID AND ProductID in
  (2, 4, 25, 13, 7, 89, 22, 34)
    AND OrderDate >= '05/01/1998'
  GROUP BY OrderDate, ProductID
  ORDER BY Rev DESC
  
  你可以看到,索引視并不是很輕易操作,但是它卻可以給你帶來更多的好處。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 绥江县| 扎赉特旗| 神池县| 南宫市| 云林县| 和静县| 本溪| 白城市| 濮阳县| 阳信县| 皋兰县| 五台县| 久治县| 资兴市| 建瓯市| 于都县| 和静县| 确山县| 九江县| 鹿泉市| 绥宁县| 古浪县| 余姚市| 云霄县| 辉县市| 黑水县| 旅游| 旬邑县| 惠州市| 信丰县| 固阳县| 棋牌| 望城县| 郯城县| 囊谦县| 无极县| 拜城县| 东台市| 乐平市| 肇源县| 阳高县|