文档库 最新最全的文档下载
当前位置:文档库 › SQLServer2000里自动重建索引

SQLServer2000里自动重建索引

SQLServer2000里自动重建索引
SQLServer2000里自动重建索引

SQLServer2000里自动重建索引

在所有的OLTP环境里,实质上所有的索引都将随着时间产生碎片。几乎所有的UPDA TE、INSERT、DELETE活动都将引起索引比最初创建时变得更无组织。页拆分更多,大量的页上只有很少的数据,因此满足每个SELECT需要更多的I/O。数据和索引的碎片越多,应用程序就会更慢,数据花费的空间就更多。对此你能做什么呢?你可以定期的重建索引。

那么什么可以立即使用呢?

基本上你可以使用数据库维护向导来执行索引重建,创建维护计划来完成。如果你原意接受它固有的缺陷,这也可以使用。首先,用维护向导来配置和完成索引重建是不慎重的。它将重建每一个索引,不管它是否需要重建。如果你有一个有很多大表和大量索引的大数据库,这会出问题,因为不加区别的重建整个数据库的索引会花费很长的时间,会使你的维护窗口不可用。问题在于,要么全部重建,要么全部不重建,你根本不能以任何方式分批处理数据库的表。

那么有什么别的能做吗?你可以写一个脚本来重建选择的表的索引。这样你能对数据库分批处理以减少在重建索引时你维护窗口执行的时间。你需要将这个时间减小到最少,因为重建索引会对表执行排它锁,在重建索引期间禁止用户访问。所以你可以每周的每个工作日的晚上重建五分之一表的索引,所有的索引至少一周做一次。然而,这也是不慎重的――你将重建所有表的索引而不论数据和索引是否是有碎片。

这里推荐选择性的重建索引。你需要检查表的索引和数据的碎片,保留数据,据此操作,重建索引要用确定的且区别对待的方式。仅仅通过这样系统的方法,你可以仅重建那些实际需要重建的表的数据和索引。而且也只有这种方式能最小化索引重建的时间。在整个索引重建期间,如果你不想影响你的用户的话,减少索引重建的时间是至关重要的。

那么我们怎样可以解决呢?

可以使用命令

DBCC SHOWCONTIG()

SQLServer2000比以前版本有一个大的改进就是这个简单而又至关重要的命令。DBCC SHOWCONTIG是SQLServer提供来检查索引碎片情况的工具。在以前的版本里(7.0和更早的版本),这个命令只输出文本,如果手工处理这个命令很好,然而,要实现自动化目的,它会带来严重的问题。那意味着你要循环执行每一个表并将结果输出到文本文件,然后为了读和解释原文的输出结果以便获得你寻找的信息,需要进行烦人的结构化处理。

SQLServer2000对DBCC SHOWCONTIG()命令引进了一个关键子句,名为WITH TABLERESULTS。这意味着你能运行这个命令然后将捕获的数据直接输出到表里,而不是还需要使用XP_CMDSHELL来操作的文本文件里。

在SQLServer2000里,这意味着你能结构化的循环处理表,通过在它们上面运行DBCC SHOWCONTIG命令以将捕获碎片信息插入表中。然后你能循环使用这个结果,根据碎片的情况,选择性的进行碎片整理。可以用下面的存储过程实现:

CREATE PROCEDURE sp_defragment_indexes @maxfrag DECIMAL

AS --王成辉翻译整理,转贴请注明出处

--声明变量

SET NOCOUNT ON

DECLARE @tablename VARCHAR (128)

DECLARE @execstr VARCHAR (255)

DECLARE @objectid INT

DECLARE @objectowner VARCHAR(255)

DECLARE @indexid INT

DECLARE @frag DECIMAL

DECLARE @indexname CHAR(255)

DECLARE @dbname sysname

DECLARE @tableid INT

DECLARE @tableidchar VARCHAR(255)

--检查是否在用户数据库里运行

SELECT @dbname = db_name()

IF @dbname IN ('master', 'msdb', 'model', 'tempdb') BEGIN

PRINT 'This procedure should not be run in system databases.' RETURN

END

--第1阶段:检测碎片

--声明游标

DECLARE tables CURSOR FOR

SELECT convert(varchar,so.id)

FROM sysobjects so

JOIN sysindexes si

ON so.id = si.id

WHERE so.type ='U'

AND si.indid < 2

AND si.rows > 0

-- 创建一个临时表来存储碎片信息

CREATE TABLE #fraglist (

ObjectName CHAR (255),

ObjectId INT,

IndexName CHAR (255),

IndexId INT,

Lvl INT,

CountPages INT,

CountRows INT,

MinRecSize INT,

MaxRecSize INT,

AvgRecSize INT,

ForRecCount INT,

Extents INT,

ExtentSwitches INT,

AvgFreeBytes INT,

AvgPageDensity INT,

ScanDensity DECIMAL,

BestCount INT,

ActualCount INT,

LogicalFrag DECIMAL,

ExtentFrag DECIMAL)

--打开游标

OPEN tables

-- 对数据库的所有表循环执行dbcc showcontig命令FETCH NEXT

FROM tables

INTO @tableidchar

WHILE @@FETCH_STATUS = 0

BEGIN

--对表的所有索引进行统计

INSERT INTO #fraglist

EXEC ('DBCC SHOWCONTIG (' + @tableidchar + ') WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')

FETCH NEXT

FROM tables

INTO @tableidchar

END

-- 关闭释放游标

CLOSE tables

DEALLOCATE tables

-- 为了检查,报告统计结果

SELECT * FROM #fraglist

--第2阶段: (整理碎片) 为每一个要整理碎片的索引声明游标

DECLARE indexes CURSOR FOR

SELECT ObjectName, ObjectOwner = user_name(so.uid), ObjectId, IndexName, ScanDensity FROM #fraglist f

JOIN sysobjects so ON f.ObjectId=so.id

WHERE ScanDensity <= @maxfrag

AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0

-- 输出开始时间

SELECT 'Started defragmenting indexes at ' + CONVERT(VARCHAR,GETDATE())

--打开游标

OPEN indexes

--循环所有的索引

FETCH NEXT

FROM indexes

INTO @tablename, @objectowner, @objectid, @indexname, @frag

WHILE @@FETCH_STATUS = 0

BEGIN

SET QUOTED_IDENTIFIER ON

SELECT @execstr = 'DBCC DBREINDEX (' + '''' +RTRIM(@objectowner) + '.' + RTRIM(@tablename) + '''' +

', ' + RTRIM(@indexname) + ') WITH NO_INFOMSGS'

SELECT 'Now executing: '

SELECT(@execstr)

EXEC (@execstr)

SET QUOTED_IDENTIFIER OFF

FETCH NEXT

FROM indexes

INTO @tablename, @objectowner, @objectid, @indexname, @frag

END

-- 关闭释放游标

CLOSE indexes

DEALLOCATE indexes

-- 报告结束时间

SELECT 'Finished defragmenting indexes at ' + CONVERT(VARCHAR,GETDATE())

-- 删除临时表

DROP TABLE #fraglist

GO

使用

这个存储过程应该创建在master数据库里,以便你能在服务器上的任何用户数据库里使用。

在用户数据库里通过传递一个参数(MAXFRAG)来运行。该参数是一个百分比值。意思是任何索引的碎片扫描密度小于这个值。例如,如果你想要整理那些扫描密度小于95%的索引的碎片:

USE pubs

GO

EXEC sp_deframent_indexes 95.00

局限

这个过程依赖于的标准是扫描密度,但扫描密度对于那些跨越多个文件的索引来说不是一个有效的标准。如果你的索引确实跨越多个文件,你需要用另一个标准(如Logical Frag)来更改这个存储过程。然而,这类更改超过本文的范围;如果你的索引跨越多个文件,你需要做更多的工作。

怎样做,做什么?

这个存储过程有两个独特的部分。

第1阶段

在这部分里,存储过程通过在数据库里的每个表上运行下面的命令来检查索引碎片:DBCC SHOWCONTIG (‘tablename') WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS 命令的结果存储在预先创建的临时表#fraglist里。这里就会用到DBCC SHOWCONTIG 语句的WITH TABLERESULTS的好处,仅这一点,真正的节省了太多的以前版本得到同样结果所花费的麻烦和精力。

你应该注意该存储过程工作的数据库的表的拥有者是不是dbo,通常是。我发现我最初的版本不起作用,当时一个软件经销商给我们提供的新系统的数据库里就出现了拥有者不是dbo 的表。当我在这个新系统上第一次运行我的碎片整理过程时,这个程序的缺点就暴露无遗了,最后彻底失败。这个问题实际上出现在碎片整理阶段(阶段2),因为表在这里要引用表名,而在阶段1,DBCC SHOWCONTIG命令引用的时表的ID即object_id。

第2阶段

这儿使用了另一个游标来循环处理表#fraglist里的记录,这些记录是那些扫描密度低于传给存储过程参数的那个阈值的表:

DBCC DBREINDEX()

执行的结果以输出文件的形式显示在表#fraglist的内容之后,以便你能查看表和索引的碎片,正如屏幕上所显示的那样,也可以通过查看DBCC DBREINDEX()执行的结果列表来查看采取的动作。利用这些你也能推导出每个索引重建的时间。

输出结果是什么意思?

输出示例:

上面是在Excel里打开的存储过程输出文本文件的一个截屏。为了简洁一些列已经删掉了。你需要用文本文件向导来打开它,选择固定列宽,打开导入从第三行起。

这里,你能够检查你选择检查的数据库里的表的扫描密度。

在接下来的输出文件里(DBCC SHOWCONTIG输出结果的后面),你会发现正被重建索引的每个表或索引的细节,这部分的开始和结束部分都有重建索引的开始和结束时间。如下面例子显示的那样:

为什么不使用DBCC INDEXDEFRAG()去减少阻塞?

答案是如果你想要或者需要的话就使用它。如果你需要7×24小时的在线操作,那么DBCC DBREINDEX()的排他表锁不适合你的业务,你可以使用它来代替DBCC DBREINDEX()。然而,你需要适当改变一下语法,因为它们是不相同的(谢谢,微软!)。如果你不知道它们的区别,这里有一个简单的摘要:当运行DBCC DBREINDEX()的时候,必须对表有排他锁,因为它是一个完全的,彻头彻尾的索引重建操作。而DBCC INDEXDEFRAG()就不那么完全了,在线的操作试图改善你索引的环境而不至于引起阻塞和中断OLTP(希望如此)。我必须承认我从来不用DBCC INDEXDEFRAG(),因为很幸运的是我的系统不需要严格的7×24在线且要求不阻塞,所以我不敢担保是否有效率。我已经理解它不是和DBCC DBREINDEX一样有效率。然而它的确比什么都没有强,所以如果你的数据库运行一个全球的WEB站点并且从来不能停止,这在今天这也很普遍,那么你需要使用它来代替以改变这个存储过程。

添加到调度任务里

对于有相当经验的DBA来说这是一个相关的微不足道的任务,所以我在这里不会提供它的代码。作为一个独立的任务或在你存在的维护作业里的一个步骤都行。你要确保作业的步骤或作业里的输出结果是一个文本文件以便你能保存和查看所有重要的输出文件。

结论

希望这篇文章和代码能帮助你完成一个对数据库服务器维护来说更好的更精确的方法。现在的维护窗口开销很大,所以在影响用户和执行时间上保持最小的同时也提供了有效率和良好的数据库服务器维护。用调度作业实现这个过程,小心的监控它的输出结果。

SQL Server数据库远程备份和还原

远程备份SQL SERVER数据库 我们使用本地的SQL 企业管理器来实现远程备份SQL SERVER数据库。步骤如下:1,首先打开企业管理器-------展开MICROSOFT SQL SERVERS------在SQL SERVER组上右键-------选择“新建SQL SERVER 注册”如图所示: 2,打开向导后点击下一步,进入添加服务器,在可用的服务器里输入你要远程备份数据库的服务器IP ,点击添加以后,在添加的服务器栏目里就会出现刚才你所添加的服务器IP。点击下一步。如图所示:

3,在这一步,选择第二项,使用SQL 身份验证。如图所示: 4,输入正确的SQL 管理员帐号和密码,点击确定以后,就将远程的服务器SQL数据库显示在本地了!如图所示:

5,展开远程服务器的数据库。按照下图所示,就可以在本地进行远程SQL SERVER的数据库备份了。

=============================================== 说明: 一、当我们真正使用SQL SERVER的超级用户进行远程备份数据库的时候,我们就能感受到这个帐号不仅带来了方便,更给服务器安全带来了不可忽视的威胁,所以这个帐号一定要和系统管理员密码那样设置的够复杂! 二、经我个人测试,发现无法用SQL SERVER 2000 来远程链接 SQL SERVER 2005. 三、以上测试均在:WINDOWS 2003 SQL SERVER2000下测试成功!

SQL Server 2000 数据库还原备份文件 1、打开Sql server 2000数据库,在数据库标签上有右键选择-》所有任务-》还原数据库 2、弹出还原数据库对话框 (1)在“常规”选项卡中的“还原为数据库(R):”后面的文本框中填写要还原后数据库的名称 (2)在“常规”选项卡中的“还原”后面的单选按钮中选择“从设备(M)”(3)在“常规”选项卡中的“参数”的“设备(V)”中点击按钮“选择设备”(4)在弹出的对话框中选择“文件名(F)”的单选按钮,在下面的选择框中选择需要还原的文件 (5)点击确定

索引存储及使用原理

clustering_factor 是表征表中数据的存储顺序和某索引字段顺序的符合程度。 一、索引的存储结构 索引是一种允许直接访问数据表中某一数据行的树型结构,为了提高查询效率而引入,是一个独立于表的对象,可以存放在与表不同的表空间中。索引记录中存有索引关键字和指向表中数据的指针(地址)。对索引进行的I/O 操作比对表进行操作要少很多。索引一旦被建立就将被Oracle系统自动维护,查询语句中不用指定使用哪个索引。 分类可以按逻辑设计和物理实现来分类。 索引逻辑分类 单列索引:基于一列的操作 多列索引:组合索引,最多为32列。组合索引的列不一定与表中列顺序相同。 惟一索引:列的值各不相同。 非惟一索引:列的值允许相同。 基于函数的惟一索引:利用表中一列或多列基于函数表达式所创建的索引。既可以是B-树,也可以是位图索引。 索引物理分类 分区或非分区索引,非分区既可以是B-树,也可以是位图索引。 B-树:包括正常或反转关键字索引,反转关键字在数据库优化中介绍。 位图索引 B-树索引 索引的存储方式

虽然所有索引都使用B 树结构,但术语“B 树索引”通常与存储每个关键字的行标识列表的索引关联。 B 树索引结构 至上而下,是根结点、分枝结点及叶子结点,叶子结点中有指向表中数据行的索引行。叶子结点被双向链表在一起,以方便按索引关键字升序或降序扫描。 索引的顶部为根,其中包含指向索引中下一级的项,下一级为分枝块,分枝块又指向索引中下一级的块,最低一级为叶节点,其中包含指向表行的索引项。叶块为双重链接,有助于按关键字值的升序和降序扫描索引。 索引项叶节点的格式 索引项由以下三部分组成: ? 项标题(entry header),存储列数和锁定信息 ? 关键字列的“长度- 值”(length-value pairs) ,必需成对出现,定义了列长度,紧跟在列长度之后的就是列的值。 ? 行的行标识(RowID),包含关键字值。 索引项叶结点的特征 在非分区表上的B 树索引中: ? 如果多行具有相同的关键字值,并且索引没有被压缩,则关键字值重复存放。 ? 没有索引项与所有关键字列都为NULL 的行对应,即如果某列值为Null,则不存储相应的索引项。如果Where子句中索引的所在列值为null,Oracle将不使用索引进行全表扫描。 ? 因为所有行都属于同一段,所以使用受限行标识指向表中的行,使用RowID可以节省索引存储空间。 DML 操作对索引的影响 当在表上执行DML 操作时,Oracle 服务器将自动维护所有的索引,下面解释DML命令对索引的影响: ? 插入(Insert)操作导致在适当的块中插入索引项。 ? 删除(Delete)行只导致逻辑删除索引项,删除的行所用的空间不能用于新项,直到删除块中的所有项。 ? 更新(Update)操作将选删除,再插入,除了在创建时,其它任何时候PCTFREE 设置对索引都没有影响,即使索引块空间少于PCTFREE 指定的空间,仍可以向索引块添加新项。 二、查询使用索引探索: §1.1 简介 本文简要介绍了CBO成本计算的基本原理,并初步解释了初始化参数optimizer_index_cost_adj和db_file_multiblock_read_count对CBO的影响。 数据库版本为Oracle 9.0.1 平台为Windows2000 system@FXSB01> select *from v$version; BANNER ---------------------------------------------------------------- Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production PL/SQL Release 9.0.1.1.1 - Production CORE 9.0.1.1.1 Production TNS for 32-bit Windows: Version 9.0.1.1.0 - Production NLSRTL Version 9.0.1.1.1 – Production

SQLServer数据库备份与恢复

SQLServer数据库备份与恢复 学院:工程学院专业:机械设计制造及其自动化班级:01 姓名:张丹学号:1522111 【实验内容】 通过SQL Server 自带的备份功能备份数据库 利用SQL Server自带的还原功能还原数据库 【实验原理】 数据库的建立和使用极大的方便了人们对数据的管理和应用,数据的稳定性和可恢复至关重要,因此要定期对数据库的数据进行备份。 【实验环境】 Windows 实验台 SQL Server 2000 【实验步骤】 打开Windows实验台,运行Windows 2003系统;运行SQL Server 2000的“查询分析器”和“企业管理器”。 SQL Server 数据库备份 (1)打开企业管理器,展开服务器组,然后展开服务器。 (2)展开数据库,选中所要备份的数据库,单击鼠标右键,依次选择“所有 任务”,“备份数据库”。 (3)在弹出的对话框中,依次修改:“名称”、“备份方式”、“目的”、“重写方 式”,最后点“确定”。 (4)开始备份。 (5)最后备份完成。 SQL Server 数据库还原 (1)打开企业管理器,展开服务器组,然后展开服务器。 (2)展开数据库,选中所要还原的数据库,单击鼠标右键,依次选择“所有 任务”,“还原数据库”。 (3)在弹出的对话框中,依次修改:“还原后的数据名”、“要还原的备份文件”。

(4)然后选择“选项”标签卡,选中“在现有数据库上强制还原”多选项。 (5)点击“确定”按钮开始还原。 (6)最后还原完成,如下图所示。 【实验总结】 该实验较复杂,对数据库的备份与还原的掌握与运用十分实用。

空间索引结构(学生)分解

第七章空间索引结构 空间索引技术是从空间数据库中获取空间数据的有效方法,是提高空间数据查询和各种空间分析效率的关键技术。建立空间索引是为了缩小空间数据的搜索范围,以便在空间数据查询时不必遍历整个空间数据集,只访问空间索引数据便可快速得到一条特定的空间查询语句所请求的空间数据,或得到包含全部空间查询结果的一个较小的空间数据集。 索引文件中包含的数据称为索引数据,索引结构是索引数据的数据结构及索引创建与维护算法的总称。空间索引结构是按照空间数据在空间分布上的特性来组织和存储索引数据的索引结构。一种良好的空间索引结构应满足下列三个要求: 一、存储效率高:相对于被索引的数据集而言,索引数据的数据量应尽量小。否则,访问索引数据可能成为数据查询与更新的效率瓶颈。 二、查询效率高:空间索引结构需要选择良好的索引数据结构,设计具体的基于索引的空间访问方法(SAM Spatial Access Method),必须能够高效的实现以下几种基于位置的查询: 1、点选择:从数据集中找出包含给定点的所有空间对象。 2、范围查询:查询与给定对象间的距离小于某个给定值的所有空间对象。 3、区域(窗口)查询:查找含在区域内、与区域相交或部分位于区域中的所有空间对象。窗口是一个特殊的区域,窗口查询是GIS中最常用、最基本的查询。 4、K-最邻近查询:给定一个参照对象(点、线或区域),查询距离参照对象最近的K 1个空间对象。 5、空间关系查询:相交、相邻、包含等拓扑关系查询,方位关系和基于距离的各种查询。 6、其他查询:将满足一定空间条件的两个空间对象集合进行空间连接,空间集合运算等也是一种空间访问。 三、更新效率高:许多GIS应用中会涉及海量且不断变化的空间数据集。数据集中数据对象的增加、修改和删除将直接导致索引数据的更新,索引数据与被索引的数据集必须保持一致,才能保证基于索引数据的查询结果的正确性。索引数据的更新操作包括:插入索引项,将新数据对象的索引项添加到索引数据中;删除索引项,把数据对象的索引项从索引数据中删除;修改索引项,在索引数据中先删除再增加该数据对象的索引。数据集经常变化时,要求其索引数据的更新开销不要很大,特别要避免更新时引起的索引重组。因此,需要考虑新增索引项和删除索引项时,索引结构的快速更新能力。 很难设计一种空间索引结构同时能够提供高效的存储、高效的查询和高效的更新,实际应用中总是牺牲某些方面的效率来换取另外方面的效率。 索引结构可分为静态索引和动态索引结构。静态索引结构针对静态不变的数据,索引只建一次,不需要更新,强调索引数据的存储效率和查询效率,不强调索引更新的效率。动态索引结构强调数据在动态更新过程中保证较高的查询效率和索引空间存储效率,往往以牺牲索引更新效率为代价,这种牺牲是有限度的。 索引结构还分为内存索引和外存索引,外存索引需要考虑磁盘页面访问的效率瓶颈问题。这里主要研究面向海量空间数据的、2D空间对象的外存索引结构。 7.1空间索引分类 非空间数据库中存储的数据为结构化数据,通常以主关键字建立索引文件,以非主属性建立倒排文件,索引项按自然数序列或字符顺序排列。空间数据库存储的数据为结构复杂、不能完全结构化的空间数据,为了支持基于位置的各类查询和分析,需要以表示空间对象几何形状的坐标数据为索引字段来建立空间索引。非空间数据库的索引结构不能满足空间数据库的索引需求,必须研究和设计专用的空间索引结构和基于索引的空间访问方法(SAM Spatial Access

四种基本的存储结构

四种基本的存储结构 Prepared on 22 November 2020

数据的四种基本存储方法 数据的存储结构可用以下四种基本存储方法得到: (1)顺序存储方法 该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。 由此得到的存储表示称为顺序存储结构(Sequential Storage Structure),通常借助程序语言的数组描述。 该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。 (2)链接存储方法 该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。由此得到的存储表示称为链式存储结构(Linked Storage Structure),通常借助于程序语言的指针类型描述。 (3)索引存储方法 该方法通常在储存结点信息的同时,还建立附加的索引表。

索引表由若干索引项组成。若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(Dense Index)。若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引(Spare Index)。索引项的一般形式是: (关键字、地址) 关键字是能唯一标识一个结点的那些数据项。稠密索引中索引项的地址指示结点所在的存储位置;稀疏索引中索引项的地址指示一组结点的起始存储位置。 (4)散列存储方法 该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址。 四种基本存储方法,既可单独使用,也可组合起来对数据结构进行存储映像。 同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构来表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求。 数据结构三方面的关系

数据库的存储结构(文件、记录的组织和索引技术)

数据库的存储结构(文件、记录的组织和索引技术) by 沈燕然0124141 利用课余时间自学了第6章《数据库存储结构》,对于数据 库不同层次的存储结构,文件记录组织和索引技术有了一定的 了解,在这篇札记中将会结合一些具体应用中涉及到的数据存 储和索引知识,以及通过与过去学习过的一些数据结构比较来 记录自己学习的心得体会。这些实例涉及不同的数据库系统, 如Oracle, DB2和Mysql等等,它们之间会有一些差异。不过 本文旨在探讨数据存储方面的问题,因而兼容并包地将其一并收入,凡是可能需要说明之处都会加上相应的注解。:) 1、数据库(DBS)由什么组成?——逻辑、物理和性能特征 1、什么是数据库系统(DBS)——DBS用文件系统实现 在关系模型中,我们把DBS看成关系的汇集。DBS存在的目的就是为了使用户能够简单、方便、容易地存取数据库中的数据。因此在用户的眼中,数据库也就是以某种方式相关的表的集合。用户并不需要去关心表之间关系,更不需要了解这些表是怎样存储的。但是我们现在从DBA(数据库管理员)的角度来看,情况就比那稍稍复杂一点。 实际的数据库包含许多下面列出的物理和逻辑对象: ?表、视图、索引和模式(确定数据如何组织) ?锁、触发器、存储过程和包(引用数据库的物理实现) ?缓冲池、日志文件和表空间(仅处理如何管理数据库性能) 2、什么是表空间?——表空间相当于文件系统中的文件夹。 表空间被用作数据库和包含实际表数据的容器对象之间的一层,表空间可以包含多个不同的表。用户处理的实际数据位于表中,他们并不知道数据的物理表示,这种情况有时被称为数据的物理无关性。

上图描述了一个ORACLE数据库大致的表空间组织,USER中存放主要的数据表,TEMP存放临时数据表,INDX存放索引,TOOLS存放回退段(RBS). 表空间在DB2数据库系统中是比较典型的说法,在Mysql等系统中也直接使用文件系统中文件夹的概念。新建一个表的时候可以指定它所在的表空间,至于用文件具体存储数据时如何存储这可能就是各个数据库系统的商业机密了,至少DB2是这样。另外值得关注的一点是不同于oracles对表空间的严格要求,Mysql的数据库形式相对比较简单,以文件夹的形式存放在安装目录的/data/下面,该数据库的每一个表对应两个文件,一个存放表中数据,另一个存放元数据信息,也就是建表时指明的列属性等等信息。 3、文件中的记录在物理上如何实现?——文件组织形式 在外存中,DB以文件形式组织,而文件由记录组成。文件结构由OS的文件系统提供和管理。文件组织有两种方式——定长记录格式和变长记录格式。 那种格式更好? 定长记录格式——优点是插入操作较简单。 缺点是对记录长度有硬性要求,而且有的记录可能横跨多个快,降低读写效率。 变长记录格式——优点是记录长度自由方便 缺点是记录长度差异导致删除后产生大量“碎片”,记录很难伸长,尤其“被拴记录”移动代价相当大。 中庸之道——预留空间和指针方式 记录长度大多相近——采用预留空间方法,取最大记录长为统一标准,在短记录多于空间处填特定空值或记录尾标志符。 记录长度相差很大——采用指针形式(每纪录后的指针字段把相同属性值记录链接起来)。文件中使用两种块——固定块(存放每条链中第一条记录)和溢出块(存放其 余纪录)。 3、记录在文件中怎样组织?

oracle数据库索引的理解与总结

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 例如这样一个查询:SELECT * FROM TABLE1 WHERE ID = 44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面找44(也就是在ID这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位的。 建立索引的目的是加快对表中记录的查找或排序。为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。 虽然建立索引能加快对表中记录的查询或者排序速度,但是并不是索引建得越多越好,这就需要我们了解使用索引过程中,索引的一些优点以及缺陷: 使用索引的好处: 创建索引可以大大提高系统的性能: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。使用索引的一些不足: 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引: ?在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; ?在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; ?在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; ?在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; ?在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。 同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点: ?对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。 ?对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了

四种基本的存储结构

数据的四种基本存储方法 数据的存储结构可用以下四种基本存储方法得到: (1)顺序存储方法 ???该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。 ???由此得到的存储表示称为顺序存储结构(SequentialStorageStructure),通常借助程序语言的数组描述。 该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。 (2)链接存储方法 ???该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。由此得到的存储表示称为链式存储结构(LinkedStorageStructure),通常借助于程序语言的指针类型描述。 (3)索引存储方法 ???该方法通常在储存结点信息的同时,还建立附加的索引表。 ???索引表由若干索引项组成。若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(DenseIndex)。若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引(SpareIndex)。索引项的一般形式是:

????????????????????(关键字、地址) 关键字是能唯一标识一个结点的那些数据项。稠密索引中索引项的地址指示结点所在的存储位置;稀疏索引中索引项的地址指示一组结点的起始存储位置。(4)散列存储方法 ???该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址。 四种基本存储方法,既可单独使用,也可组合起来对数据结构进行存储映像。 同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构来表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求。 数据结构三方面的关系 数据的逻辑结构、数据的存储结构及数据的运算这三方面是一个整体。孤立地去理解一个方面,而不注意它们之间的联系是不可取的。 存储结构是数据结构不可缺少的一个方面:同一逻辑结构的不同存储结构可冠以不同的数据结构名称来标识。 【例】线性表是一种逻辑结构,若采用顺序方法的存储表示,可称其为顺序表;若采用链式存储方法,则可称其为链表;若采用散列存储方法,则可称为散列表。

基于主键的在线重定义表的三种索引重建方式

环境配置:创建mssm和assm表空间,在mssm上创建带有主键的表t,在assm上创建中间表t_interim。验证t可以使用基于主键的在线重定义,启动在线重定义。这些步骤完成后,进入到本文讨论的三种索引重建方式。 步骤:1 创建mssm,assm LEO1@LEO1>create tablespace MSSM datafile '/u01/app/oracle/oradata/LEO1/disk1/mssm01.dbf' size 20m extent management local segment space management manual; Tablespace created. LEO1@LEO1>create tablespace ASSM datafile '/u01/app/oracle/oradata/LEO1/disk1/assm01.dbf' size 20m extent management local segment space management auto; Tablespace created. 2.检查表空间的段空间管理模式 LEO1@LEO1>select segment_space_management,tablespace_name from dba_tablespaces where tablespace_name in ('MSSM','ASSM');

SEGMEN TABLESPACE_NAME ------ -------------------- AUTO ASSM MANUAL MSSM 3.在MSSM表空间上创建t表 LEO1@LEO1>create table t(a number constraint pk_t primary key ) tablespace MSSM; Table created. LEO1@LEO1>insert into t values (10); 1 row created. LEO1@LEO1>insert into t values (20); 1 row created. LEO1@LEO1>insert into t values (30); 1 row created.

数据结构第1章习题解答

第1章习题解答 1.1什么是数据结构?一个数据结构结构的二元组定义形式是什么样的?举例解释其含义。 [解答] 概括地说,数据结构是互相有关联的数据元素的集合。也就是说,数据结构是由某个数据元素的集合和该集合中的数据元素之间的关系组成的,因此数据结构可以用一个二元组来表示。例如,B=(D,R),其中D是某一数据元素的集合,R是D上的关系的有限集。R所表示的是集合D的数据元素之间的逻辑关系,它表示的可能是数据元素之间客观存在的某种联系,也可能是为了处理问题的需要而人为组织的数据元素之间的某种关系,因此,称之为数据的逻辑结构。例如,一个农历节气表,就构成了一个数据结构,其数据元素是一年的农历二十四节气,数据元素之间的关系是节气的时间先后关系。又如,一个某年级学生的成绩排序表,也是一个数据结构,其数据元素是包含成绩项的该年级的学生记录,数据元素之间的关系是学生之间的成绩高低关系。为了在计算机中进行数据处理,必须把从实际问题中抽象出来的数据的逻辑结构映象到计算机的存储器中,即要把抽象出来的数据元素集合D 和数据元素之间的关系存储到计算机的存储器中,称之为数据的物理结构或存储结构,它是数据的逻辑结构在计算机中的表示。 1.2假设R是集合M上的一个关系,R的定义是什么?对实际问题而言,其含义是什么? [解答] 如果R是对集合M自身的笛卡尔积所取的一个子集,那么我们就说“R是集合M上的一个关系”。对实际问题而言,它表示的是集合M中元素的某种相关性。例如,对于参加一个羽毛球比赛的运动员集合,可以用一个二元关系表示出各场比赛的胜负关系。对于一组课程的集合,可以用一个二元关系表示出各门课程之间的先修和后续关系等等。 1.3设有集合M={d1,d2,d3,d4,d5}上的一个关 R={(d1,d2),(d2,d4),(d4,d5),(d2,d5),(d1,d4),(d1,d5),(d3,d5),(d1,d3)},试说明关系R具有什么样的性质。 [解答] 从二元关系的基本性质容易验证,该关系R是反自反的、反对称的、传递的关系。 因为关系R中没有(d i,d i)这样的元素,所以它是反自反的。 因为关系R中没有(元素d i,d j)和(d j,d i)同时存在的情况,所以它是反对称的。 关系R 的传递性表现在: 有元素(d1,d2),(d2,d4),同时有元素(d1,d4), 有元素(d1,d2),(d2,d5),同时有元素(d1,d5), 有元素(d1,d3),(d3,d5),同时有元素(d1,d5), 有元素(d1,d4),(d4,d5),同时有元素(d1,d5), 有元素(d2,d4),(d4,d5),同时有元素(d2,d5)。 1.4什么是线性结构?什么是非线性结构?举例说明。 [解答]

SQL Server备份与还原--恢复master数据库

SQL Server备份与还原--恢复master数据库 简介: Master数据库在整体上控制SQL sever的所有方面。这个数据库中包括所有的配置信息、用户登陆信息、当前正在服务器中运行的信息等。是整个系统中最重要的数据库。Master 数据库被损坏,可能导致SQL Server实例无法启动,所以在创建了任何用户定义的对象后都要备份它。下面几种情况都应该备份Master数据库: 更改服务器范围的配置选项 创建或删除用户数据库 创建或删除逻辑备份设备 Master数据库只能做完整备份 实验名称:备份master数据库 实验模拟环境: Master数据库数据丢失或出现设置错误,但能启动实例,通过还原Master的完整备份修复已损坏的数据库 注:恢复的前提必须是此前对数据库进行过完整备份,否则就失败。 实验步骤: 1. 破坏master文件(假设其文件破坏) 停止SQL Server服务,更改数据库文件master.mdf(随便重命名这里改为yue.mdf)

再次启动SQL Server服务,系统会提示错误信息,启动失败,如下图所示; 将数据库安装光盘1放进光驱

2. 运行安装setup.exe,重建master数据库。 在命令行下,运行cd c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn路径,进入数据库安装目录。 运行start /wait E:\setup.exe /qn INSTANCENAME=mssqlserver REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=https://www.wendangku.net/doc/371625089.html, 查看系统目录如图,新建成功。 3. 重建成功好,重新启动服务。

计算机操作系统教程--核心与设计原理习题9答案

习题9参考答案 习题 9 9.1什么是文件?什么是文件系统?文件系统有哪些功能? 答:文件是具有文件名的一组相关信息的集合。文件系统是指操作系统中与管理文件有关的软件和数据的集合。文件系统的主要功能: (1)实现按文件名存取文件信息。 (2)为用户提供统一的和友好的接口。 (3)实施对文件和文件目录的管理。 (4)文件存储器空间的分配和回收。 (5)提供有关文件的共享和保护。 9.2从用户观点看,UNIX或LINUX操作系统将文件分为哪几类? 答:分为如下三类: 普通文件:是指系统中最一般组织格式的文件,一般是字符流组成的无结构文件 目录文件:是由文件的目录信息构成的特殊文件,操作系统将目录也做成文件,便于统一管理 特殊文件:在UNIX或Linux操作系统中,所有的输入输出外部设备都被看作特殊文件便于统一管理 9.3举例说明何种文件长度是固定不变的,何种文件长度是动态变化的。 答:某些系统可执行程序,如shell、vi的长度通常是固定不变的;而用户正在编辑的文本文件或源代码文件的长度通常是动态变化的。 9.4试说明文件系统中对文件操作的系统调用有哪几个?其功能是什么? 答:文件系统中对文件操作的系统调用及功能有: 文件创建Create 文件打开Open 读文件Read 写文件Write 关闭文件Close 删除文件delete 9.5什么是逻辑文件?什么是物理文件? 答:从用户观点看逻辑文件是用户所观察到的文件组织形式,是用户可以直接处理的数据及结构,它独立于物理设备,又称文件组织。 物理文件是与存储介质性能有关的,在外存上存储的组织形式。 9.6逻辑文件包括哪两种类型? 答:无结构文件(流式文件)和有结构文件(记录式文件)。 9.7按文件的物理结构,可将文件分为哪几类? 答:按文件的物理结构,可将文件分为三类:顺序文件、链接文件、索引文件 9.8在MS—DOS中有两个文件A和B,A占用11、12、16和14四个盘块;B占用13、 18和20三个盘块。试画出在文件A和B中各盘块间的链接情况及FAT的情况。

oracle+rac环境下索引热块的处理思路

O O r r a a c c l l e e r r a a c c 环环境境下下索索引引热热块块争争用用的的 处处理理思思路路

修改记录

目录 1 Oracle rac环境下的索引热块争用 (4) 1.1 场景总结 (4) 1.2 处理思路 (4) 2 关于索引使用的一些参考经验 (7) 2.1 无法使用索引的场景 (7) 2.2 如何创建合适的索引 (9)

1Oracle rac环境下的索引热块争用 1.1 场景总结 1、多实例并发insert表导致的索引热块争用 Oracle rac环境下多个节点同时对同一张表进行高频率的insert操作,由于需要对索引进行实时的维护,因此很容易引起索引的热块争用。特别是当B*Tree索引中有一列是由递增的序列号产生的话(特别是主键字段),那么这些索引信息基本上分布在同一个索引叶块,当进行连续的insert操作时,索引块很容易产生争用。解决的办法可以考虑采用反向索引或者按实例分区表的方式来处理。 2、多实例并发查询导致的索引热块争用 主要分为以下两种情况: 1)多实例并发查询的SQL语句的执行计划存在问题,采用了错误的执行计划或者是使用了不正确的索引,导致索引块的过度read,从而产生索引的热块争用。这种情况通过对相关SQL语句的执行计划进行优化可以缓解索引的热块争用。 2)多实例并发查询的SQL语句的执行计划是正确的,但是由于select的频率非常高,容易造成双机之间索引块的gc等待。对于这种情况建议应用分实例分模块连接查询,避免多实例同时对同一张表(索引)进行并发查询。 1.2 处理思路 1、反向索引 反向索引是B*Tree索引的一个分支,它的设计是为了运用在某些特定的环境下的。Oracle推出它的主要目的就是为了降低在rac环境下索引叶块的争用。当B*Tree索引中有一列是由递增的序列号产生的话(特别是主键字段),那么这些索引信息基本上分布在同一个索引叶块,当用户修改或访问相似的列时,索引块很容易产生争用。反向索引中的索引码将会被分散到各个索引块中,从而减少了索引争用。

SQLServer2000里自动重建索引

SQLServer2000里自动重建索引 在所有的OLTP环境里,实质上所有的索引都将随着时间产生碎片。几乎所有的UPDA TE、INSERT、DELETE活动都将引起索引比最初创建时变得更无组织。页拆分更多,大量的页上只有很少的数据,因此满足每个SELECT需要更多的I/O。数据和索引的碎片越多,应用程序就会更慢,数据花费的空间就更多。对此你能做什么呢?你可以定期的重建索引。 那么什么可以立即使用呢? 基本上你可以使用数据库维护向导来执行索引重建,创建维护计划来完成。如果你原意接受它固有的缺陷,这也可以使用。首先,用维护向导来配置和完成索引重建是不慎重的。它将重建每一个索引,不管它是否需要重建。如果你有一个有很多大表和大量索引的大数据库,这会出问题,因为不加区别的重建整个数据库的索引会花费很长的时间,会使你的维护窗口不可用。问题在于,要么全部重建,要么全部不重建,你根本不能以任何方式分批处理数据库的表。 那么有什么别的能做吗?你可以写一个脚本来重建选择的表的索引。这样你能对数据库分批处理以减少在重建索引时你维护窗口执行的时间。你需要将这个时间减小到最少,因为重建索引会对表执行排它锁,在重建索引期间禁止用户访问。所以你可以每周的每个工作日的晚上重建五分之一表的索引,所有的索引至少一周做一次。然而,这也是不慎重的――你将重建所有表的索引而不论数据和索引是否是有碎片。 这里推荐选择性的重建索引。你需要检查表的索引和数据的碎片,保留数据,据此操作,重建索引要用确定的且区别对待的方式。仅仅通过这样系统的方法,你可以仅重建那些实际需要重建的表的数据和索引。而且也只有这种方式能最小化索引重建的时间。在整个索引重建期间,如果你不想影响你的用户的话,减少索引重建的时间是至关重要的。 那么我们怎样可以解决呢? 可以使用命令 DBCC SHOWCONTIG() SQLServer2000比以前版本有一个大的改进就是这个简单而又至关重要的命令。DBCC SHOWCONTIG是SQLServer提供来检查索引碎片情况的工具。在以前的版本里(7.0和更早的版本),这个命令只输出文本,如果手工处理这个命令很好,然而,要实现自动化目的,它会带来严重的问题。那意味着你要循环执行每一个表并将结果输出到文本文件,然后为了读和解释原文的输出结果以便获得你寻找的信息,需要进行烦人的结构化处理。 SQLServer2000对DBCC SHOWCONTIG()命令引进了一个关键子句,名为WITH TABLERESULTS。这意味着你能运行这个命令然后将捕获的数据直接输出到表里,而不是还需要使用XP_CMDSHELL来操作的文本文件里。 在SQLServer2000里,这意味着你能结构化的循环处理表,通过在它们上面运行DBCC SHOWCONTIG命令以将捕获碎片信息插入表中。然后你能循环使用这个结果,根据碎片的情况,选择性的进行碎片整理。可以用下面的存储过程实现: CREATE PROCEDURE sp_defragment_indexes @maxfrag DECIMAL AS --王成辉翻译整理,转贴请注明出处 --声明变量 SET NOCOUNT ON DECLARE @tablename VARCHAR (128) DECLARE @execstr VARCHAR (255) DECLARE @objectid INT DECLARE @objectowner VARCHAR(255) DECLARE @indexid INT DECLARE @frag DECIMAL DECLARE @indexname CHAR(255) DECLARE @dbname sysname

SQLServer数据库的备份和还原详解

SQLServer数据库的备份和还原详解 1. 基本概念: mdf文件:SqlServer数据库的主数据文件 ldf文件:SqlServer数据库的日志文件 SQL Server管理的每个数据库都对应一个mdf文件和一个ldf文件。当SQL Server服务处于开启时,这些文件是无法删除的。 用SQL Server 企业管理器,单击某个数据库,选择右键菜单中的“属性",从弹出对话框的“数据文件”和“事务日志”标签页中可以查看这个数据库对应的mdf文件路径和ldf文件路径。 2. 用SQL Server 企业管理器备份和还原数据库: 例如,备份数据库到可移动存储介质,然后还原到另一台机器上,步骤如下: 备份: 单击要备份的数据库,从右键菜单选择“所有任务->备份数据库”。 选择“完全备份”,删除“备份到”列表框中的现有内容,然后“添加”;弹出“选择备份目的”对话框,“文件名”就是你要得到的备份文件的存放路径。选好后确定,这时“备份到”列表框中出现你选择的目的文件路径。 因为没有重名文件,“追加”或“重写”选项的效果是一样的,不用管。选中它,确定,等待备份完成。完成后在你指定的路径下将看到你备份的文件,注意该文件默认没有后缀名。 备份文件还有很大的压缩空间,一般一个40多M的备份文件用winRAR压缩后只有4M左右,作为邮箱附件也没有问题。 还原: 将备份文件放到一个便于管理的文件夹下,例如你的数据库叫“test”,可以建立一个叫“e:\db_bak\test\”的文件夹。 从SQL Server 企业管理器单击“数据库”,选择“新建数据库...”,起名“test”,确定。看到该数据库出现在数据库列表中,里面只有一些系统tables。注意新建数据库默认的mdf文件和ldf文件都会被放在SQL Server安装目录下的子目录“MSSQL\data\”中,文件名与数据库名称相同。 单击该数据库,从右键列表中选择“所有任务->还原数据库”。弹出“还原数据库”对话框。 选择还原方式:“从设备”,单击“选择设备”弹出“选择还原设备”对话框。选择“还原自磁盘”。

数据库的存储结构

第五章数据库的存储结构 5.1数据库存储介质的特点 ●内存 容量低(一般只有几百M,最多一两个G),价格高,速度快,数据易丢失(掉电、当机等)。 一般做DBMS(或CPU)和DB之间的数据缓冲区。 实时/内存数据库系统中使用内存存放实时数据。 ●硬盘 容量高(一般有几十G,多到一两百G),价格中,速度较快,数据不易丢失(除非物理性损坏)。 一般做用来存放DB。 实时/内存数据库系统中使用硬盘存放历史数据库。 ●移动硬盘(USB接口) 容量高(一般有几十G),价格中,速度较快,数据不易丢失(除非物理性损坏)。 一般做用来做备份。 ●光盘 容量低(一般650M/片,但光盘可在线更换,海量),价格低,速度中,数据不易丢失(除非物理性损坏)。 一般做用来做备份。 ●磁盘(软盘) 容量低(一般有几M,优盘多到一两百M),价格中,速度较慢,数据不易丢失(除非物理性损坏)。 一般数据库不使用磁盘。 ●磁带 容量低(但可在线更换,海量),价格低,速度最慢,且要按顺序存取,数据不易丢失(除非物理性损坏)。 一般做用来做备份。 按速度从高到低: 内存、硬盘、USB盘(移动硬盘和优盘)、光盘、软盘、磁带。 按在线容量从大到小: 硬盘、移动硬盘、内存、光盘、磁带、优盘、软盘。 物理块:512byte/1K/2K/4K/8K 原因: (1)减少I/O的次数; (2)减少间隙的数目,提高硬盘空间的利用率。 ORACLE逻辑块与物理块(init.ora中db_block_size定义逻辑块大小) 缓冲块和缓冲区(即SGA中的Data Buffer Cache) 延迟写(delayed write)技术/预取(Prefetching)技术(ORACLE中由DBWR进程完成数据的读写)

Oracle 创建索引

Oracle创建索引 Oracle在创建索引时要遵循以下的原则: ●平衡查询和DML的需要。在易挥发(DML操作频繁)的表上尽量减少索引的数量, 因为索引虽然加快了查询的速度,但却降低了DML操作速度。 ●将其放入单独的表空间,不要与表、临时段或还原(回滚)段放在一个表空间,因为索 引段会与这些段竞争输入/输出(I/O)。 ●使用统一的EXTENT尺寸:数据块尺寸的5倍,或表空间的MINIMUM EXTENT的尺 寸。这样做的目的是为了减少系统的转换时间。 ●对大索引可以考虑使用NOLOGGING。这样做的目的是通过减少REDO操作来提高系 统的效率,但是如果一旦系统发生崩溃,则该索引一般是无法进行完全灰度的。不过问题也不是很大,因为真正的数据还在表中,所以可以通过重建该索引来恢复与之前完全相同的效果。 ●索引的INITRANS参数通常应该比相对应表的高。以为索引项要比表中的数据行小的 多,所以一个数据块可以存放更多的索引项(记录)。 创建索引的命令格式: CREATE (UNIQUE|BITMAP) INDEX [用户名.]索引名 ON [用户名.]表名 (列名[ASC | DESC] [,列名[ASC| DESC ] ]…) [TABLESPACE 表空间名] [PCTFREE 正整型数] [INITRANS 正整型数] [MAXTRANS 正整型数] [存储子句] [LOGGING | NOLOGGING] [NOSORT] 其中, ●UNIQUE:说明该索引是唯一索引,默认是非唯一的 ●ASC:说明所创建的索引为升序 ●DESC:说明所创建的索引为降序 ●表空间名:说明将要创建的索引的表空间名 ●PCTFREE:在创建索引时每一个块中预留的空间 ●INITRANS:在每一个块中预分配的事物记录数,默认值为2 ●MAXTRANS:在每一个块中可以分配的事物记录数的上限,默认为255 ●存储子句:说明在索引中EXTENTS怎样分配 ●LOGGING:说明在创建索引是和以后的索引操作中要记录联机重做日志文件(默认)●NOLOGGING:说明索引的创建和一些数据装入操作将不记录联机重做日志文件 ●NOSORT:数据库中所存的数据行已经按升序排好,因此在创建索引时不需要再排序了●PCTUSED:在索引中不能说明该参数。因为索引记录必须以正确的顺序存放,所以用 户不能控制何时向索引块中插入索引数据行 使用数据字典的dba_indexes获取有关scott用户的索引基于表、所在的表空间、索引的类型和索引的状态等信息。 SQL> select index_name,table_name,tablespace_name,index_type, uniqueness,status from dba_indexes where owner = 'SCOTT' AND INDEX_NAME not like 'SYS%'

相关文档
相关文档 最新文档