WEB开发网
开发学院数据库MSSQL Server SQL Server和Oracle中的索引 阅读

SQL Server和Oracle中的索引

 2008-09-03 09:59:42 来源:WEB开发网   
核心提示: 一个表如果建有大量索引会影响 insert、update和delete语句的性能,因为所有索引都必须随表中数据的更改进行相应的调整,SQL Server和Oracle中的索引(3), 唯一索引唯一索引确保索引键不包含重复的值,因此,并在连续页中对索引行重新排序(根据需要分配新页),这样可以

一个表如果建有大量索引会影响 insert、update和delete语句的性能,因为所有索引都必须随表中数据的更改进行相应的调整。

唯一索引

唯一索引确保索引键不包含重复的值,因此,表或视图中的每一行在某种程度上是唯一的。

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

包含性列索引

一种非聚集索引,它扩展后不仅包含键列,还包含非键列。

索引涵盖

指查询中的select与where子句的所用列同时也属于非聚集索引的情况。这样就可以更快检索数据,因为所有信息都可以直接来自于索引页,从而SQL Server可以避免访问数据页。加上独立的索引文件组,可以用最快速度访问数据。

请看如下表示例:

A.创建简单非聚集索引

以下示例为 Purchasing.ProductVendor 表的 VendorID 列创建非聚集索引。

USEAdventureWorks;
GO
 
createINDEXIX_ProductVendor_VendorID 
  ONPurchasing.ProductVendor(VendorID); 
GO

B. 创建简单非聚集组合索引

以下示例为 Sales.SalesPerson 表的 SalesQuota 和 SalesYTD 列创建非聚集组合索引。

createNONCLUSTEREDINDEXIX_SalesPerson_SalesQuota_SalesYTD
  ONSales.SalesPerson(SalesQuota,SalesYTD);
GO

C. 创建唯一非聚集索引

以下示例为 Production.UnitMeasure 表的 Name 列创建唯一的非聚集索引。该索引将强制插入 Name 列中的数据具有唯一性。

USEAdventureWorks;
GO
 
createUNIQUEINDEXAK_UnitMeasure_Name 
  ONProduction.UnitMeasure(Name);
GO

无论何时对基础数据执行插入、更新或删除操作,SQL Server 2005 数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。当索引包含的页中的逻辑排序(基于键值)与数据文件中的物理排序不匹配时,就存在碎片。碎片非常多的索引可能会降低查询性能,导致应用程序响应缓慢。这个时候,我们需要做得就是重新组织和重新生成索引。重新生成索引将删除该索引并创建一个新索引。此过程中将删除碎片,通过使用指定的或现有的填充因子设置压缩页来回收磁盘空间,并在连续页中对索引行重新排序(根据需要分配新页)。这样可以减少获取所请求数据所需的页读取数,从而提高磁盘性能。

上一页  1 2 3 4 5 6 7  下一页

Tags:SQL Server Oracle

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接