欢迎来到天天文库
浏览记录
ID:22372302
大小:59.50 KB
页数:7页
时间:2018-10-28
《sqlserver和oracle中的索引》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、SQLServer和Oracle中的索引>>教育资源库 1SQLServer中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B树)中,使SQLServer可以快速有效地查找与键值关联的行。 表或视图可以包含以下类型的索引: 聚集索引 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。 只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有
2、聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。 每个表几乎都对列定义聚集索引来实现下列功能: 1、可用于经常使用的查询。 2、提供高度唯一性。 在创建聚集索引之前,应先了解数据是如何被访问的。考虑对具有以下特点的查询使用聚集索引: 使用运算符(如BETeasure_Name ONProduction.UnitMeasure(Name);GO 无论何时对基础数据执行插入、更新或删除操作,SQLServer2005数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散
3、在数据库中(含有碎片)。当索引包含的页中的逻辑排序(基于键值)与数据文件中的物理排序不匹配时,就存在碎片。碎片非常多的索引可能会降低查询性能,导123下一页>>>>这篇文章来自..,。致应用程序响应缓慢。这个时候,我们需要做得就是重新组织和重新生成索引。重新生成索引将删除该索引并创建一个新索引。此过程中将删除碎片,通过使用指定的或现有的填充因子设置压缩页来回收磁盘空间,并在连续页中对索引行重新排序(根据需要分配新页)。这样可以减少获取所请求数据所需的页读取数,从而提高磁盘性能。 可以使用下列方法重新生成聚集索引和非聚集索引: 带REBUIL
4、D子句的alterINDEX。此语句将替换DBCCDBREINDEX语句。 带drop_EXISTING子句的createINDEX。 示例如下: A.重新生成索引 以下示例将重新生成单个索引。USEAdventurePDB=ON, STATISTICS_NOREPUTE=ON);GO 2 Oracle中的索引 索引是Oracle使用的加速表中数据检索的数据库对象。 下面的情况,可以考虑使用索引: 1)大表 2)主键(自动索引) 3)单键列(自动索引) 4)外键列(自动索引) 5)大表上nFROMTABLEn
5、=:X的索引,要达到叶子块来获取第一行,不论使用的:X值是什么,都会执行同样数目的I/O,由此可见B*树的B代表的是balanced,所谓的Heightbalanced。大多数B*树索引的高度都是2或3,即使索引中有数百万行记录也是如此,这说明,一般而言,在索引中找到一个键只需要2到3次I/O,这确实不错。 B*树是一个极佳的通用索引机制,无论是大表还是小表都很适用,随着底层表大小增长,获取数据的性能仅会稍有恶化。 比如,我们为customers表建立一个常见的B*树索引:createINDEXIDX_Cus_Cityoncustomers
6、(city) B*树索引有以下子类型: 复合索引 复合索引也是一种B*树索引,它由多列组成。当我们拥有使用两列或超过两列的频繁查询时,就使用B*树复合索引,而其所使用的两列或多列在on-yyyy。如果为每一列创建一个索引,那么为了搜索列的值,两个索引都要被读取,但是如果为两列都创建一个复合索引,那么只有一个索引被读取,这样无疑比两个索引要求更少的I/O。 2)使用前面例子中同样的条件,如果创建一个复合索引,将更快地检索行,因为你正在排除了所有order_status_id不是1的行,从而减少了搜索order_date的行数。 反向键索
7、引 B*树索引的另一个特点是能够将索引键反转。首先,你可以问问自己为什么想这么做?B*树索引是为特定的环境、特定的问题而设计的。实现B*树索引的目的是为了减少右侧索引中对索引叶子块的竞争,比如在一个OracleRAC环境中,某些列用一个序列值或时间戳填充,这些列上建立的索引就属于右侧(right-hand-side)索引。上一页123下一页>>>>这篇文章来自..,。 RAC是一种Oracle配置,其中多个实例可以装载和打开同一个数据库。如果两个实例需要同时修改同一个数据块,它们会通过一个硬件互连(interconnect)来回传递这个块来
8、实现共享,互连是两个(或多个)机器之间的一条专用网络连接。如果某个利用一个序列填充,这个列上有一个主键索引,那么每个人插入新值时,都会视图修改目前索引
此文档下载收益归作者所有