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

Oracle數(shù)據(jù)庫索引和SQL Server的闡述

數(shù)據(jù)庫 Oracle
以下的文章主要是對(duì)SQL Server與Oracle數(shù)據(jù)庫索引的實(shí)際介紹,其中包括對(duì)SQL Server中的索引詳細(xì)描述,以及不同類型的索引介紹。

Oracle數(shù)據(jù)庫索引是和表或是視圖相關(guān)聯(lián)的磁盤上的結(jié)構(gòu),我們可以對(duì)其加快從表或是視圖里檢索行的速度。Oracle數(shù)據(jù)庫索引主要包含由表或是相關(guān)視圖中的一列或是多列生成的鍵。這些鍵存儲(chǔ)在一個(gè)結(jié)構(gòu)(B 樹)。

1 SQL Server中的索引

使 SQL Server 可以快速有效地查找與鍵值關(guān)聯(lián)的行。

表或視圖可以包含以下類型的索引:

聚集索引

聚集索引根據(jù)數(shù)據(jù)行的鍵值在表或視圖中排序和存儲(chǔ)這些數(shù)據(jù)行。Oracle數(shù)據(jù)庫索引定義中包含聚集索引列。每個(gè)表只能有一個(gè)聚集索引,因?yàn)閿?shù)據(jù)行本身只能按一個(gè)順序排序。

只有當(dāng)表包含聚集索引時(shí),表中的數(shù)據(jù)行才按排序順序存儲(chǔ)。如果表具有聚集索引,則該表稱為聚集表。如果表沒有聚集索引,則其數(shù)據(jù)行存儲(chǔ)在一個(gè)稱為堆的無序結(jié)構(gòu)中。

每個(gè)表幾乎都對(duì)列定義聚集索引來實(shí)現(xiàn)下列功能:

1、可用于經(jīng)常使用的查詢。

2、提供高度唯一性。

在創(chuàng)建聚集Oracle數(shù)據(jù)庫索引之前,應(yīng)先了解數(shù)據(jù)是如何被訪問的??紤]對(duì)具有以下特點(diǎn)的查詢使用聚集索引:

使用運(yùn)算符(如 BETWEEN、>、>=、< 和 <=)返回一系列值。

使用聚集索引找到包含***個(gè)值的行后,便可以確保包含后續(xù)索引值的行物理相鄰。例如,如果某個(gè)查詢?cè)谝幌盗胁少徲唵翁?hào)間檢索記 錄,PurchaseOrderNumber 列的聚集索引可快速定位包含起始采購訂單號(hào)的行,然后檢索表中所有連續(xù)的行,直到檢索到***的采購訂單號(hào)。

返回大型結(jié)果集。

使用 JOIN 子句;一般情況下,使用該子句的是外鍵列。

使用 ORDER BY 或 GROUP BY 子句。

在 ORDER BY 或 GROUP BY 子句中指定的列的Oracle數(shù)據(jù)庫索引,可以使數(shù)據(jù)庫引擎 不必對(duì)數(shù)據(jù)進(jìn)行排序,因?yàn)檫@些行已經(jīng)排序。這樣可以提高查詢性能。

聚集索引不適用于具有下列屬性的列:

頻繁更改的列

這將導(dǎo)致整行移動(dòng),因?yàn)閿?shù)據(jù)庫引擎 必須按物理順序保留行中的數(shù)據(jù)值。這一點(diǎn)要特別注意,因?yàn)樵诖笕萘渴聞?wù)處理系統(tǒng)中數(shù)據(jù)通常是可變的。

寬鍵

寬鍵是若干列或若干大型列的組合。所有非聚集索引將聚集索引中的鍵值用作查找鍵。為同一表定義的任何非聚集索引都將增大許多,這是因?yàn)榉蔷奂饕?xiàng)包含聚集鍵,同時(shí)也包含為此非聚集索引定義的鍵列?!》蔷奂饕?/p>

非聚集索引具有獨(dú)立于數(shù)據(jù)行的結(jié)構(gòu)。非聚集索引包含非聚集索引鍵值,并且每個(gè)鍵值項(xiàng)都有指向包含該鍵值的數(shù)據(jù)行的指針。

從非聚集索引中的索引行指向數(shù)據(jù)行的指針稱為行定位器。行定位器的結(jié)構(gòu)取決于數(shù)據(jù)頁是存儲(chǔ)在堆中還是聚集表中。對(duì)于堆,行定位器是指向行的指針。對(duì)于聚集表,行定位器是聚集索引鍵。

在 SQL Server 2005 中,可以向非聚集Oracle數(shù)據(jù)庫索引的葉級(jí)別添加非鍵列以跳過現(xiàn)有的索引鍵限制(900 字節(jié)和 16 鍵列),并執(zhí)行完整范圍內(nèi)的索引查詢。

非聚集索引與聚集索引具有相同的 B 樹結(jié)構(gòu),它們之間的顯著差別在于以下兩點(diǎn):

1、基礎(chǔ)表的數(shù)據(jù)行不按非聚集鍵的順序排序和存儲(chǔ)。

2、非聚集索引的葉層是由索引頁而不是由數(shù)據(jù)頁組成。

設(shè)計(jì)非聚集索引時(shí)需要注意數(shù)據(jù)庫的特征:

更新要求較低但包含大量數(shù)據(jù)的數(shù)據(jù)庫或表可以從許多非聚集索引中獲益從而改善查詢性能。

決策支持系統(tǒng)應(yīng)用程序和主要包含只讀數(shù)據(jù)的數(shù)據(jù)庫可以從許多非聚集索引中獲益。查詢優(yōu)化器具有更多可供選擇的索引用來確定最快的訪問方法,并且數(shù)據(jù)庫的低更新特征意味著索引維護(hù)不會(huì)降低性能。

聯(lián)機(jī)事務(wù)處理應(yīng)用程序和包含大量更新表的數(shù)據(jù)庫應(yīng)避免使用過多的索引。此外,索引應(yīng)該是窄的,即列越少越好。

一個(gè)表如果建有大量索引會(huì)影響 INSERT、UPDATE 和 DELETE 語句的性能,因?yàn)樗兴饕急仨氹S表中數(shù)據(jù)的更改進(jìn)行相應(yīng)的調(diào)整。

唯一索引

唯一索引確保Oracle數(shù)據(jù)庫索引鍵不包含重復(fù)的值,因此,表或視圖中的每一行在某種程度上是唯一的。

聚集索引和非聚集索引都可以是唯一索引。

包含性列索引

一種非聚集索引,它擴(kuò)展后不僅包含鍵列,還包含非鍵列。

索引涵蓋

指查詢中的SELECT與WHERE子句的所用列同時(shí)也屬于非聚集索引的情況。這樣就可以更快檢索數(shù)據(jù),因?yàn)樗行畔⒍伎梢灾苯觼碜杂谒饕摚瑥亩鳶QL Server可以避免訪問數(shù)據(jù)頁。加上獨(dú)立的索引文件組,可以用最快速度訪問數(shù)據(jù)。

請(qǐng)看如下表示例:

A.創(chuàng)建簡(jiǎn)單非聚集索引 以下示例為 Purchasing.ProductVendor 表的 VendorID 列創(chuàng)建非聚集索引。

 

  1. USE AdventureWorks;  
  2. GO  
  3. CREATE INDEX IX_ProductVendor_VendorID  
  4. ON Purchasing.ProductVendor (VendorID);  
  5. GO  

 

B. 創(chuàng)建簡(jiǎn)單非聚集組合Oracle數(shù)據(jù)庫索引

以下示例為 Sales.SalesPerson 表的 SalesQuota 和 SalesYTD 列創(chuàng)建非聚集組合索引。

 

  1. CREATE NONCLUSTERED INDEX IX_SalesPerson_SalesQuota_SalesYTD  
  2. ON Sales.SalesPerson (SalesQuota, SalesYTD);  
  3. GO  

 

C. 創(chuàng)建唯一非聚集索引

以下示例為 Production.UnitMeasure 表的 Name 列創(chuàng)建唯一的非聚集索引。該索引將強(qiáng)制插入 Name 列中的數(shù)據(jù)具有唯一性。

 

  1. USE AdventureWorks;  
  2. GO  
  3. CREATE UNIQUE INDEX AK_UnitMeasure_Name  
  4. ON Production.UnitMeasure(Name);  
  5. GO  

 

無論何時(shí)對(duì)基礎(chǔ)數(shù)據(jù)執(zhí)行插入、更新或刪除操作,SQL Server 2005 數(shù)據(jù)庫引擎都會(huì)自動(dòng)維護(hù)索引。隨著時(shí)間的推移,這些修改可能會(huì)導(dǎo)致索引中的信息分散在數(shù)據(jù)庫中(含有碎片)。當(dāng)索引包含的頁中的邏輯排序(基于鍵值)與數(shù) 據(jù)文件中的物理排序不匹配時(shí),就存在碎片。

碎片非常多的索引可能會(huì)降低查詢性能,導(dǎo)致應(yīng)用程序響應(yīng)緩慢。這個(gè)時(shí)候,我們需要做得就是重新組織和重新生成索 引。重新生成索引將刪除該索引并創(chuàng)建一個(gè)新索引。此過程中將刪除碎片,通過使用指定的或現(xiàn)有的填充因子設(shè)置壓縮頁來回收磁盤空間,并在連續(xù)頁中對(duì)索引行重 新排序(根據(jù)需要分配新頁)。這樣可以減少獲取所請(qǐng)求數(shù)據(jù)所需的頁讀取數(shù),從而提高磁盤性能。

可以使用下列方法重新生成聚集索引和非聚集Oracle數(shù)據(jù)庫索引:

帶 REBUILD 子句的 ALTER INDEX。此語句將替換 DBCC DBREINDEX 語句。

帶 DROP_EXISTING 子句的 CREATE INDEX。

示例如下:

A. 重新生成索引

以下示例將重新生成單個(gè)索引。

 

  1. USE AdventureWorks;  
  2. GO  
  3. ALTER INDEX PK_Employee_EmployeeID ON HumanResources.Employee  
  4. REBUILD;  
  5. GO  

 

B.重新生成表的所有索引并指定選項(xiàng)

下面的示例指定了 ALL 關(guān)鍵字。這將重新生成與表相關(guān)聯(lián)的所有索引。其中指定了三個(gè)選項(xiàng)。

 

  1. ALTER INDEX ALL ON Production.Product  
  2. REBUILD WITH (FILLFACTOR = 80SORT_IN_TEMPDB = ON,  
  3. STATISTICS_NORECOMPUTE = ON);  
  4. GO  

 

2 Oracle 中的Oracle數(shù)據(jù)庫索引

索引是Oracle使用的加速表中數(shù)據(jù)檢索的數(shù)據(jù)庫對(duì)象。

下面的情況,可以考慮使用索引:

1) 大表

2) 主鍵(自動(dòng)索引)

3) 單鍵列(自動(dòng)索引)

4) 外鍵列(自動(dòng)索引)

5) 大表上WHERE子句常用的列

6) ORDER BY 或者GROUP BY子句中使用的列。

7) 至少返回表中20%行的查詢

8) 不包含null值的列。

【編輯推薦】

  1. Oracle 11g調(diào)用函數(shù)幾種常用方法
  2. 在pl中對(duì)Oracle procedure進(jìn)行創(chuàng)建
  3. Oracle數(shù)據(jù)字典文檔經(jīng)典版詳解
  4. Oracle數(shù)據(jù)庫在設(shè)計(jì)規(guī)范化中的兩個(gè)比較重要的要求
  5. 提高Oracle數(shù)據(jù)庫性能可以通過優(yōu)化數(shù)據(jù)庫
責(zé)任編輯:佚名 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-07-22 11:17:52

SQL Server數(shù)

2010-07-08 11:05:14

SQL Server數(shù)

2010-07-20 10:40:21

2022-11-04 08:34:27

Oracle數(shù)據(jù)庫

2011-03-16 08:54:45

Oracle數(shù)據(jù)庫索引

2010-10-26 15:54:02

連接oracle數(shù)據(jù)庫

2010-04-09 16:40:01

Oracle數(shù)據(jù)庫

2010-07-01 14:18:09

SQL Server數(shù)

2010-07-09 11:28:12

SQL Server數(shù)

2010-07-13 16:20:30

SQL Server數(shù)

2009-11-18 16:16:51

Oracle數(shù)據(jù)庫

2009-03-27 13:15:20

OracleSQL Server鏡像

2011-05-26 14:07:11

SQL ServerOracle數(shù)據(jù)庫鏡像對(duì)比

2010-07-15 17:28:50

SQL Server

2010-07-05 13:29:56

2010-11-29 11:55:47

SYBASE數(shù)據(jù)庫

2010-07-07 10:31:43

SQL Server數(shù)

2011-08-16 09:05:21

SQL Server數(shù)測(cè)試索引空間換時(shí)間

2010-04-09 10:32:03

Oracle 數(shù)據(jù)庫

2010-04-19 10:00:02

Oracle SQL
點(diǎn)贊
收藏

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