自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用SQL Server 2000索引視圖提高性能

數(shù)據(jù)庫(kù) SQL Server
SQL Server 2000是SQL Server數(shù)據(jù)庫(kù)眾多版本中的其中之一,功能較之前的版本都有了很大的改進(jìn)。本文將重點(diǎn)為大家介紹使用SQL Server 2000索引視圖提高性能。

本文介紹 SQL Server 2000 企業(yè)版的新功能,即索引視圖。講解索引視圖并討論一些提高性能的具體方案。

什么是索引視圖?

許多年來(lái),Microsoft? SQL Server? 一直都提供創(chuàng)建虛擬表(稱(chēng)為視圖)的功能。在過(guò)去,這些視圖主要有兩種用途:

提供安全機(jī)制,將用戶限制在一個(gè)或多個(gè)基表中的數(shù)據(jù)的某個(gè)子集。

提供一種機(jī)制,允許開(kāi)發(fā)人員定制用戶如何才能以邏輯方式查看存儲(chǔ)在基表中的數(shù)據(jù)。

SQL Server 2000 已經(jīng)擴(kuò)展了 SQL Server 視圖的功能,以提高系統(tǒng)性能。它可以在一個(gè)視圖上創(chuàng)建唯一的群集索引和非群集索引,可以改進(jìn)最復(fù)雜查詢的數(shù)據(jù)訪問(wèn)性能。在 SQL Server 2000 中,擁有唯一群集索引的視圖被稱(chēng)為索引視圖。

注意:索引視圖只是SQL Server 2000 企業(yè)版和SQL Server 2000 開(kāi)發(fā)人員版的一個(gè)功能。

從數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS) 的觀點(diǎn)來(lái)看,視圖是數(shù)據(jù)(元數(shù)據(jù))的說(shuō)明。創(chuàng)建典型視圖時(shí),通過(guò) SELECT 語(yǔ)句(定義一個(gè)顯示為虛擬表的結(jié)果集)來(lái)定義元數(shù)據(jù)。當(dāng)其它查詢的 FROM 子句中引用了某個(gè)視圖時(shí),將從系統(tǒng)目錄中檢索該元數(shù)據(jù),并對(duì)其進(jìn)行擴(kuò)展以代替該視圖的引用。在視圖擴(kuò)展之后,查詢優(yōu)化器會(huì)為正在執(zhí)行的查詢編譯單個(gè)執(zhí)行計(jì)劃。

如果是非索引視圖,視圖在運(yùn)行時(shí)將被實(shí)體化。任何計(jì)算(如聯(lián)接或聚合)都在為每個(gè)引用該視圖的查詢執(zhí)行查詢期間進(jìn)行。(視圖并不總需要被完全實(shí)體化。查詢可以包含其它一些謂詞、聯(lián)接或聚合,以應(yīng)用于該視圖所引用的表和視圖。)在視圖上創(chuàng)建了唯一的群集索引之后,視圖的結(jié)果集會(huì)立即被實(shí)體化并持續(xù)保存在數(shù)據(jù)庫(kù)的物理存儲(chǔ)空間中,以便節(jié)省這種操作所占用的大量資源。

在執(zhí)行查詢時(shí),有兩種方法可以使用索引視圖。查詢可直接引用索引視圖,更重要的是,如果查詢優(yōu)化器確定視圖能夠替換為查詢的部分或全部,而且這是低成本的查詢計(jì)劃,則可以選擇索引視圖。第二種情況是使用索引視圖代替基礎(chǔ)表及其普通索引。此時(shí),不需要在查詢中引用視圖,查詢優(yōu)化器即可在執(zhí)行查詢期間使用該視圖。這樣,現(xiàn)有的應(yīng)用程序無(wú)需更改即可從新建的索引視圖中獲益。

通過(guò)索引視圖提高的性能

使用索引來(lái)提高查詢性能并不是什么新觀念,不過(guò),索引視圖還具有使用標(biāo)準(zhǔn)索引不能獲得的其它性能優(yōu)點(diǎn)。索引視圖能夠在以下方面提高查詢性能:

能夠預(yù)先計(jì)算聚合并將其存儲(chǔ)在索引中,從而***限度地減少在執(zhí)行查詢期間進(jìn)行成本很高的計(jì)算。

能夠預(yù)先聯(lián)接表并存儲(chǔ)生成的數(shù)據(jù)集。

能夠存儲(chǔ)聯(lián)接或聚合的組合。

下圖說(shuō)明了查詢優(yōu)化器使用索引視圖時(shí)一般能夠提高多少性能。提供的查詢復(fù)雜程度各不相同(例如,聚合計(jì)算的數(shù)量、所用表的數(shù)量或謂詞數(shù)),并包括來(lái)自實(shí)際生產(chǎn)環(huán)境的數(shù)百萬(wàn)行的大表。

 

圖 1. 當(dāng)查詢優(yōu)化器使用索引視圖時(shí)一般能夠提高多少性能

使用視圖的輔助索引

視圖的輔助性非群集索引可以提高其它查詢性能。與表的輔助索引類(lèi)似,視圖的輔助索引也可以提供更多選項(xiàng),以便查詢優(yōu)化器在編譯過(guò)程中從中進(jìn)行選擇。例如,如果查詢包括群集索引未涉及的列,優(yōu)化器可以在計(jì)劃中選擇一個(gè)或多個(gè)輔助索引,從而避免對(duì)索引視圖或基表進(jìn)行費(fèi)時(shí)的全局掃描。

由于索引需要不斷維護(hù),所以為架構(gòu)添加索引會(huì)增加數(shù)據(jù)庫(kù)的額外開(kāi)銷(xiāo)。因此應(yīng)該認(rèn)真考慮,找到索引和維護(hù)額外開(kāi)銷(xiāo)之間的平衡點(diǎn)。

使用索引視圖的好處

實(shí)現(xiàn)索引視圖之前,請(qǐng)先分析數(shù)據(jù)庫(kù)的工作量。運(yùn)用自己對(duì)查詢以及各種工具(例如 SQL 分析器)的知識(shí)來(lái)鑒別使用索引視圖可以獲益的查詢。如果經(jīng)常進(jìn)行聚合和聯(lián)接,***使用索引視圖。

并非所有查詢都會(huì)從索引視圖中獲益。與普通索引類(lèi)似,如果未使用索引視圖,就沒(méi)有好處可言。在此情況下,不但不能提高性能,還會(huì)加大磁盤(pán)空間的占用、增加維護(hù)和優(yōu)化的成本。但是,如果使用了索引視圖,它們可以(成數(shù)量級(jí)地)明顯地提高數(shù)據(jù)訪問(wèn)的性能。這是因?yàn)椴樵儍?yōu)化器使用存儲(chǔ)在索引視圖中的預(yù)先計(jì)算的結(jié)果,從而大大降低了執(zhí)行查詢的成本。

查詢優(yōu)化器只在查詢的成本比較大時(shí)才考慮使用索引視圖。這樣可以避免在查詢優(yōu)化成本超出因使用索引視圖而節(jié)省的成本時(shí),試圖使用各種索引視圖。當(dāng)查詢成本低于 1 時(shí),幾乎不使用索引視圖。

使用索引視圖可以受益的應(yīng)用包括:

  1. 決定支持工作量
  2. 數(shù)據(jù)集市
  3. 聯(lián)機(jī)分析處理 (OLAP) 庫(kù)和源
  4. 數(shù)據(jù)挖掘工作量

從查詢的類(lèi)型和模式的角度來(lái)看,受益的應(yīng)用可被歸納為包含以下內(nèi)容的應(yīng)用:

  1. 大表的聯(lián)接和聚合
  2. 查詢的重復(fù)模式
  3. 重復(fù)聚合相同或重疊的列集
  4. 針對(duì)相同關(guān)鍵字重復(fù)聯(lián)接相同的表
  5. 上述的組合

相反,包含許多寫(xiě)入的聯(lián)機(jī)事務(wù)處理 (OLTP) 系統(tǒng)或更新頻繁的數(shù)據(jù)庫(kù),可能會(huì)因?yàn)橐瑫r(shí)更新視圖和根本基表而使維護(hù)成本增加,所以不能利用索引視圖。

查詢優(yōu)化器如何使用索引視圖

SQL Server 查詢優(yōu)化器可自動(dòng)確定何時(shí)可以將索引視圖用于給定的查詢執(zhí)行中。查詢中無(wú)需直接引用視圖,優(yōu)化器就可以將該視圖用于查詢執(zhí)行計(jì)劃。因此,無(wú)需對(duì)現(xiàn)有的應(yīng)用程序本身進(jìn)行任何更改,這些應(yīng)用程序即可利用索引視圖。唯一需要做的就是創(chuàng)建索引視圖。

優(yōu)化器的考慮因素

查詢優(yōu)化器會(huì)考慮幾個(gè)條件來(lái)確定索引視圖能涵蓋部分查詢還是整個(gè)查詢。這些條件符合查詢中的單個(gè) FROM 子句并包含以下內(nèi)容:

  1. 查詢 FROM 子句中的表必須是索引視圖 FROM 子句中的表的超集。
  2. 查詢中的聯(lián)接條件必須是視圖中聯(lián)接條件的超集。
  3. 查詢中的聚合列必須是視圖中的聚合列的子集。
  4. 查詢選擇列表中的所有表達(dá)式都必須源自于視圖選擇列表或源自于不包括在視圖定義中的表。
  5. 查詢搜索條件謂詞必須是視圖定義中搜索條件謂詞的超集。視圖搜索謂詞中的每個(gè)合取項(xiàng)都必須以同樣的形式出現(xiàn)在查詢搜索謂詞中。
  6. 查詢搜索條件謂詞中的所有列(屬于視圖定義中的表)都必須出現(xiàn)在下列一項(xiàng)或多項(xiàng)中:

視圖定義中的同一個(gè)謂詞。

GROUP BY 列表。

視圖選擇列表(若沒(méi)有 GROUP BY 列表)。

如果查詢包含多個(gè) FROM 子句(子查詢、派生表、UNION),優(yōu)化器可以選擇多個(gè)索引視圖來(lái)管理含有多個(gè) FROM 子句的查詢。

注意:存在例外情形,即優(yōu)化器可能將兩個(gè) FROM 子句折疊成一個(gè)(將子查詢折疊成聯(lián)接或?qū)⑴缮碚郫B成聯(lián)接變體)。如果出現(xiàn)此類(lèi)情況,索引視圖替換可能會(huì)涵蓋原查詢中的多個(gè) FROM 子句。

本文檔結(jié)尾介紹了演示這些條件的查詢示例。而建議的***方法就是:讓查詢優(yōu)化器來(lái)確定在查詢執(zhí)行計(jì)劃中使用哪些索引(如果有的話)。

使用 NOEXPAND 選項(xiàng)

NOEXPAND 選項(xiàng)強(qiáng)制查詢優(yōu)化器象對(duì)待包含群集索引的普通表一樣對(duì)待視圖。在此情況下,必須在 FROM 子句中直接引用索引視圖。例如:

SELECT Column1, Column2, ... FROM Table1, View1 WITH (NOEXPAND)WHERE ...

使用 EXPAND VIEWS 選項(xiàng)

另外,用戶可以在查詢結(jié)束時(shí)通過(guò)使用 EXPAND VIEWS 選項(xiàng),明確地將索引視圖排除在考慮之外。例如:

SELECT Column1, Column2, ... FROM Table1, View1 WHERE ...OPTION (EXPAND VIEWS)

如果使用該選項(xiàng),查詢優(yōu)化器在評(píng)估低成本的方法(該方法涉及查詢中引用的列)時(shí)將忽略所有視圖索引。

設(shè)計(jì)的考慮因素

為數(shù)據(jù)庫(kù)系統(tǒng)找到適當(dāng)?shù)乃饕窍喈?dāng)復(fù)雜的。盡管在設(shè)計(jì)普通索引時(shí)要考慮許多可能性,但將索引視圖添加到架構(gòu)會(huì)極大地增加設(shè)計(jì)和潛在結(jié)果的復(fù)雜性。

例如:

索引視圖可用于查詢中所引用表的任何子集。 查詢中條件的任何子集(屬于表的上述子集)分組列。 聚合函數(shù),如 SUM。

應(yīng)同時(shí)設(shè)計(jì)表的索引和索引視圖,以便從各個(gè)結(jié)構(gòu)中獲得***結(jié)果。由于索引和索引視圖都可能對(duì)給定的查詢有用,所以單獨(dú)設(shè)計(jì)它們會(huì)導(dǎo)致多余的建議方案,以致存儲(chǔ)和維護(hù)開(kāi)銷(xiāo)較高。在調(diào)整數(shù)據(jù)庫(kù)的物理設(shè)計(jì)時(shí),必須均衡考慮各種查詢集的性能要求與數(shù)據(jù)庫(kù)系統(tǒng)必須支持的更新操作。因此,為索引視圖找到一種合理的物理設(shè)計(jì)是一項(xiàng)很具挑戰(zhàn)性的任務(wù),因而應(yīng)該盡可能地使用“索引微調(diào)向?qū)?rdquo;。

如果存在許多索引視圖可供查詢優(yōu)化器考慮用于特定查詢,查詢優(yōu)化成本會(huì)顯著增加。查詢優(yōu)化器可能考慮為查詢中表的任意子集定義的所有索引視圖。拒絕每一個(gè)視圖之前,必須對(duì)它進(jìn)行語(yǔ)法分析,然后研究其是否可能成為潛在的替換體。這可能需要一些時(shí)間,尤其是在有數(shù)百個(gè)此類(lèi)的視圖用于給定的查詢時(shí)。

視圖必須符合幾項(xiàng)要求,您才能為其創(chuàng)建唯一的群集索引。在設(shè)計(jì)階段,請(qǐng)考慮以下要求:

視圖以及視圖中引用的所有表都必須在同一數(shù)據(jù)庫(kù)中,并具有同一個(gè)所有者。

索引視圖無(wú)需包含要供優(yōu)化器使用的查詢中引用的所有表。

必須先為視圖創(chuàng)建唯一群集索引,然后才可以創(chuàng)建其它索引。士正確設(shè)置某些 SET 選項(xiàng)(在本文檔的后文中討論)。另外,如果這些 SET 選項(xiàng)正確,查詢優(yōu)化器將不考慮索引視圖。

視圖必須使用架構(gòu)綁定創(chuàng)建,視圖中引用的任何用戶定義的函數(shù)必須使用 SCHEMABINDING 選項(xiàng)創(chuàng)建。

另外,還要求有一定的磁盤(pán)空間來(lái)存放由索引視圖定義的數(shù)據(jù)。

上文中就使用SQL Server 2000索引視圖提高性能的問(wèn)題為大家作出了詳細(xì)的解析,希望對(duì)大家能夠有所幫助。

【編輯推薦】

  1. SQL Server 2000數(shù)據(jù)庫(kù)作數(shù)據(jù)庫(kù)服務(wù)器的優(yōu)點(diǎn)
  2. SQL Server 2000中生成XML的小技巧
  3. 在SQL Server 2000中恢復(fù)Master數(shù)據(jù)庫(kù)

 

責(zé)任編輯:迎迎 來(lái)源: 賽迪網(wǎng)
相關(guān)推薦

2010-07-15 15:42:38

2010-07-19 16:36:13

SQL Server視

2011-04-01 15:36:24

索引SQL Server

2011-03-21 15:10:13

SQL Server 視圖*

2010-07-16 10:48:24

MS SQL Serv

2019-09-19 16:59:04

數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫(kù)

2010-07-26 09:34:24

SQL Server性

2010-11-12 11:19:19

SQL Server視

2010-11-12 11:25:44

SQL SERVER視

2010-07-07 13:18:13

SQL Server視

2015-07-13 11:39:25

SphinxSQL

2010-05-26 08:47:00

索引SQL Server

2010-07-08 17:28:02

2010-07-22 09:42:47

SQL Server

2010-07-07 09:27:15

SQL Server索

2010-06-18 13:14:26

SQL Server

2010-06-30 13:49:02

SQL Server數(shù)

2010-11-11 17:15:13

SQL Server視

2010-10-21 10:42:30

SQL Server查

2011-04-02 17:21:29

sql server視圖
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)