当前位置:首页 » 编程语言 » 交互式sql索引
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

交互式sql索引

发布时间: 2023-03-05 22:46:58

1. sql查询语句是什么

SQL 一词实际上是 "Structured Query Language" 结构式查询语言的缩写,是用于对存放在计算机数据库中的数据进行组织、管理和检索的一种工具;是一种特定类型的数据库 -- 关系数据库。而控制这种数据库的计算机程序就是我们常说的 DBMS-- 数据库管理系统。譬如:SQL Server、Oracle、Sybase、DB2 等等。当用户想要检索数据库中的数据时,就通过 SQL 语言发出请求,接着 DBMS 对该 SQL 请求进行处理并检索所要求的数据,最后将其返回给用户,此过程被称作为数据库查询,这也就是数据库查询语言这一名称的由来。

SQL 并不是象 C、COBOL 和 Fortran 语言那样的完整的计算机语言。SQL 没有用于条件测试的 IF 语句,也没有用于程序分支的 Goto 语句以及循环语句 For 或 Do。确切的讲,SQL 是一种数据库子语言,SQL 语句可以被嵌入到另一种语言中,从而使其具有数据库存取功能。SQL 也非严格的结构式语言,它的句法更接近英语语句,因此易于理解,大多数 SQL 语句都是直述其意,读起来就象自然语言一样明了。SQL 还是一种交互式查询语言,允许用户直接查询存储数据,利用这一交互特性,用户可以在很短的时间内回答相当复杂的问题,而同样问题若让程序员编写相应的报表程序则可能要用几个星期甚至更长时间。

2. sql索引分为几类

聚集索引(CLUSTERED)和非聚集索引(NONCLUSTERED)。

3. SQL试题求救,高分

4.SELECT命令
8.不满足
17.some
18.to A
19.ALTER TABLE STUDENT add E-mail C(30)
20. group by
21.总编号 借书证号
25.借书证号 where
26.where group order distinct
27.PRIMARY tag REFERENCES
28.CURSOR dbf ARRAY TO FILE ADDITIVE
29.delete
31. 查询 SELECT命令
32.交互式SQL 嵌入式SQL
34.!=
35.unique

4. 数据库索引的作用

为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能。第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四,在使用分组和排序 子句进行数据检索时,同样可以显着减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点, 但是,为表中的每一个列都增加索引,是非常不明智的。这是因为,增加索引也有许多不利的一个方面。第一,创建索引和维护索引要耗费时间,这种时间随着数据 量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

索引是建立在数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列 上创建索引,例如:在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;在经常用在连接的列上,这 些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;在经常需要排序的列上创 建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因 为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。第二,对于那 些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比 例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。第四,当修改性能远远大于检索性能时,不应该创建索 引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因 此,当修改性能远远大于检索性能时,不应该创建索引。

创建索引的方法和索引的特征
创建索引的方法 51aspx.com
创建索引有多种方法,这些方法包括直接创建索引的方法和间接创建索引的方法。直接创建索引,例如使用CREATE INDEX语句或者使用创建索引向导,间接创建索引,例如在表中定义主键约束或者唯一性键约束时,同时也创建了索引。虽然,这两种方法都可以创建索引,但 是,它们创建索引的具体内容是有区别的。
使用CREATE INDEX语句或者使用创建索引向导来创建索引,这是最基本的索引创建方式,并且这种方法最具有柔性,可以定制创建出符合自己需要的索引。在使用这种方式 创建索引时,可以使用许多选项,例如指定数据页的充满度、进行排序、整理统计信息等,这样可以优化索引。使用这种方法,可以指定索引的类型、唯一性和复合 性,也就是说,既可以创建聚簇索引,也可以创建非聚簇索引,既可以在一个列上创建索引,也可以在两个或者两个以上的列上创建索引。

通过定义主键约束或者唯一性键约束,也可以间接创建索引。主键约束是一种保持数据完整性的逻辑,它限制表中的记录有相同的主键记录。在创建主键约束时,系 统自动创建了一个唯一性的聚簇索引。虽然,在逻辑上,主键约束是一种重要的结构,但是,在物理结构上,与主键约束相对应的结构是唯一性的聚簇索引。换句话 说,在物理实现上,不存在主键约束,而只存在唯一性的聚簇索引。同样,在创建唯一性键约束时,也同时创建了索引,这种索引则是唯一性的非聚簇索引。因此, 当使用约束创建索引时,索引的类型和特征基本上都已经确定了,由用户定制的余地比较小。

当在表上定义主键或者唯一性键约束时,如果表中已经有了使用CREATE INDEX语句创建的标准索引时,那么主键约束或者唯一性键约束创建的索引覆盖以前创建的标准索引。也就是说,主键约束或者唯一性键约束创建的索引的优先 级高于使用CREATE INDEX语句创建的索引。

索引的特征
索引有两个特征,即唯一性索引和复合索引。
唯一性索引保证在索引列中的全部数据是唯一的,不会包含冗余数据。如果表中已经有一个主键约束或者唯一性键约束,那么当创建表或者修改表时,SQL Server自动创建一个唯一性索引。然而,如果必须保证唯一性,那么应该创建主键约束或者唯一性键约束,而不是创建一个唯一性索引。当创建唯一性索引 时,应该认真考虑这些规则:当在表中创建主键约束或者唯一性键约束时,SQL Server自动创建一个唯一性索引;如果表中已经包含有数据,那么当创建索引时,SQL Server检查表中已有数据的冗余性;每当使用插入语句插入数据或者使用修改语句修改数据时,SQL Server检查数据的冗余性:如果有冗余值,那么SQL Server取消该语句的执行,并且返回一个错误消息;确保表中的每一行数据都有一个唯一值,这样可以确保每一个实体都可以唯一确认;只能在可以保证实体 完整性的列上创建唯一性索引,例如,不能在人事表中的姓名列上创建唯一性索引,因为人们可以有相同的姓名。

复合索引就是一个索引创建在两个列或者多个列上。在搜索时,当两个或者多个列作为一个关键值时,最好在这些列上创建复合索引。当创建复合索引时,应该考虑 这些规则:最多可以把16个列合并成一个单独的复合索引,构成复合索引的列的总长度不能超过900字节,也就是说复合列的长度不能太长;在复合索引中,所 有的列必须来自同一个表中,不能跨表建立复合列;在复合索引中,列的排列顺序是非常重要的,因此要认真排列列的顺序,原则上,应该首先定义最唯一的列,例 如在(COL1,COL2)上的索引与在(COL2,COL1)上的索引是不相同的,因为两个索引的列的顺序不同;为了使查询优化器使用复合索引,查询语 句中的WHERE子句必须参考复合索引中第一个列;当表中有多个关键列时,复合索引是非常有用的;使用复合索引可以提高查询性能,减少在一个表中所创建的 索引数量。

索引的类型
根据索引的顺序与数据表的物理顺序是否相同,可以把索引分成两种类型。一种是数据表的物理顺序与索引顺序相同的聚簇索引,另一种是数据表的物理顺序与索引顺序不相同的非聚簇索引。

聚簇索引的体系结构
索引的结构类似于树状结构,树的顶部称为叶级,树的其它部分称为非叶级,树的根部在非叶级中。同样,在聚簇索引中,聚簇索引的叶级和非叶级构成了一个树状 结构,索引的最低级是叶级。在聚簇索引中,表中的数据所在的数据页是叶级,在叶级之上的索引页是非叶级,索引数据所在的索引页是非叶级。在聚簇索引中,数 据值的顺序总是按照升序排列。

应该在表中经常搜索的列或者按照顺序访问的列上创建聚簇索引。当创建聚簇索引时,应该考虑这些因素:每一个表只能有一个聚簇索引,因为表中数据的物理顺序 只能有一个;表中行的物理顺序和索引中行的物理顺序是相同的,在创建任何非聚簇索引之前创建聚簇索引,这是因为聚簇索引改变了表中行的物理顺序,数据行按 照一定的顺序排列,并且自动维护这个顺序;关键值的唯一性要么使用UNIQUE关键字明确维护,要么由一个内部的唯一标识符明确维护,这些唯一性标识符是 系统自己使用的,用户不能访问;聚簇索引的平均大小大约是数据表的百分之五,但是,实际的聚簇索引的大小常常根据索引列的大小变化而变化;在索引的创建过 程中,SQL Server临时使用当前数据库的磁盘空间,当创建聚簇索引时,需要1.2倍的表空间的大小,因此,一定要保证有足够的空间来创建聚簇索引。

当系统访问表中的数据时,首先确定在相应的列上是否存在有索引和该索引是否对要检索的数据有意义。如果索引存在并且该索引非常有意义,那么系统使用该索引 访问表中的记录。系统从索引开始浏览到数据,索引浏览则从树状索引的根部开始。从根部开始,搜索值与每一个关键值相比较,确定搜索值是否大于或者等于关键 值。这一步重复进行,直到碰上一个比搜索值大的关键值,或者该搜索值大于或者等于索引页上所有的关键值为止。

非聚簇索引的体系结构
非聚簇索引的结构也是树状结构,与聚簇索引的结构非常类似,但是也有明显的不同。
在非聚簇索引中,叶级仅包含关键值,而没有包含数据行。非聚簇索引表示行的逻辑顺序。 非聚簇索引有两种体系结构:一种体系结构是在没有聚簇索引的表上创建非聚簇索引,另一种体系结构是在有聚簇索引的表上创建非聚簇索引。

如果一个数据表中没有聚簇索引,那么这个数据表也称为数据堆。当非聚簇索引在数据堆的顶部创建时,系统使用索引页中的行标识符指向数据页中的记录。行标识 符存储了数据所在位置的信息。数据堆是通过使用索引分配图(IAM)页来维护的。IAM页包含了数据堆所在簇的存储信息。在系统表sysindexes 中,有一个指针指向了与数据堆相关的第一个IAM页。系统使用IAM页在数据堆中浏览和寻找可以插入新的记录行的空间。这些数据页和在这些数据页中的记录 没有任何的顺序并且也没有链接在一起。在这些数据页之间的唯一的连接是IAM中记录的顺序。当在数据堆上创建了非聚簇索引时,叶级中包含了指向数据页的行 标识符。行标识符指定记录行的逻辑顺序,由文件ID、页号和行ID组成。这些行的标识符维持唯一性。非聚簇索引的叶级页的顺序不同于表中数据的物理顺序。 这些关键值在叶级中以升序维持。

当非聚簇索引创建在有聚簇索引的表上的时候,系统使用索引页中的指向聚簇索引的聚簇键。聚簇键存储了数据的位置信息。如果某一个表有聚簇索引,那么非聚簇 索引的叶级包含了映射到聚簇键的聚簇键值,而不是映射到物理的行标识符。当系统访问有非聚簇索引的表中数据时,并且这种非聚簇索引创建在聚簇索引上,那么 它首先从非聚簇索引来找到指向聚簇索引的指针,然后通过使用聚簇索引来找到数据。
当需要以多种方式检索数据时,非聚簇索引是非常有用的。当创建非聚簇索引时,要考虑这些情况:在缺省情况下,所创建的索引是非聚簇索引;在每一个表上面,可以创建不多于249个非聚簇索引,而聚簇索引最多只能有一个。
系统如何访问表中的数据
一般地,系统访问数据库中的数据,可以使用两种方法:表扫描和索引查找。第一种方法是表扫描,就是指系统将指针放置在该表的表头数据所在的数据页上,然后 按照数据页的排列顺序,一页一页地从前向后扫描该表数据所占有的全部数据页,直至扫描完表中的全部记录。在扫描时,如果找到符合查询条件的记录,那么就将 这条记录挑选出来。最后,将全部挑选出来符合查询语句条件的记录显示出来。第二种方法是使用索引查找。索引是一种树状结构,其中存储了关键字和指向包含关 键字所在记录的数据页的指针。当使用索引查找时,系统沿着索引的树状结构,根据索引中关键字和指针,找到符合查询条件的的记录。最后,将全部查找到的符合 查询语句条件的记录显示出来。
在SQL Server中,当访问数据库中的数据时,由SQL Server确定该表中是否有索引存在。如果没有索引,那么SQL Server使用表扫描的方法访问数据库中的数据。查询处理器根据分布的统计信息生成该查询语句的优化执行规划,以提高访问数据的效率为目标,确定是使用 表扫描还是使用索引。
索引的选项
在创建索引时,可以指定一些选项,通过使用这些选项,可以优化索引的性能。这些选项包括FILLFACTOR选项、PAD_INDEX选项和SORTED_DATA_REORG选项。
使用FILLFACTOR选项,可以优化插入语句和修改语句的性能。当某个索引页变满时,SQL Server必须花费时间分解该页,以便为新的记录行腾出空间。使用FILLFACTOR选项,就是在叶级索引页上分配一定百分比的自由空间,以便减少页 的分解时间。当在有数据的表中创建索引时,可以使用FILLFACTOR选项指定每一个叶级索引节点的填充的百分比。缺省值是0,该数值等价于100。在 创建索引的时候,内部索引节点总是留有了一定的空间,这个空间足够容纳一个或者两个表中的记录。在没有数据的表中,当创建索引的时候,不要使用该选项,因 为这时该选项是没有实际意义的。另外,该选项的数值在创建时指定以后,不能动态地得到维护,因此,只应该在有数据的表中创建索引时才使用。
PAD_INDEX选项将FILLFACTOR选项的数值同样也用于内部的索引节点,使内部的索引节点的填充度与叶级索引的节点中的填充度相同。如果没有 指定FILLFACTOR选项,那么单独指定PAD_INDEX选项是没有实际意义的,这是因为PAD_INDEX选项的取值是由FILLFACTOR选 项的取值确定的。
当创建聚簇索引时,SORTED_DATA_REORG选项清除排序,因此可以减少建立聚簇索引所需要的时间。当在一个已经变成碎块的表上创建或者重建聚 簇索引时,使用SORTED_DATA_REORG选项可以压缩数据页。当重新需要在索引上应用填充度时,也使用该选项。当使用 SORTED_DATA_REORG选项时,应该考虑这些因素:SQL Server确认每一个关键值是否比前一个关键值高,如果都不高,那么不能创建索引;SQL Server要求1.2倍的表空间来物理地重新组织数据;使用SORTED_DATA_REORG选项,通过清除排序进程而加快索引创建进程;从表中物理 地拷贝数据;当某一个行被删除时,其所占的空间可以重新利用;创建全部非聚簇索引;如果希望把叶级页填充到一定的百分比,可以同时使用 FILLFACTOR选项和SORTED_DATA_REORG选项。
索引的维护
为了维护系统性能,索引在创建之后,由于频繁地对数据进行增加、删除、修改等操作使得索引页发生碎块,因此,必须对索引进行维护。
使用DBCC SHOWCONTIG语句,可以显示表的数据和索引的碎块信息。当执行DBCC SHOWCONTIG语句时,SQL Server浏览叶级上的整个索引页,来确定表或者指定的索引是否严重碎块。DBCC SHOWCONTIG语句还能确定数据页和索引页是否已经满了。当对表进行大量的修改或者增加大量的数据之后,或者表的查询非常慢时,应该在这些表上执行 DBCC SHOWCONTIG语句。当执行DBCC SHOWCONTIG语句时,应该考虑这些因素:当执行DBCC SHOWCONTIG语句时,SQL Server要求指定表的ID号或者索引的ID号,表的ID号或者索引的ID号可以从系统表sysindexes中得到;应该确定多长时间使用一次 DBCC SHOWCONTIG语句,这个时间长度要根据表的活动情况来定,每天、每周或者每月都可以。
使用DBCC DBREINDEX语句重建表的一个或者多个索引。当希望重建索引和当表上有主键约束或者唯一性键约束时,执行DBCC DBREINDEX语句。除此之外,执行DBCC DBREINDEX语句还可以重新组织叶级索引页的存储空间、删除碎块和重新计算索引统计。当使用执行DBCC DBREINDEX语句时,应该考虑这些因素:根据指定的填充度,系统重新填充每一个叶级页;使用DBCC DBREINDEX语句重建主键约束或者唯一性键约束的索引;使用SORTED_DATA_REORG选项可以更快地创建聚簇索引,如果没有排列关键值, 那么不能使用DBCC DBREINDEX语句;DBCC DBREINDEX语句不支持系统表。另外,还可以使用数据库维护规划向导自动地进行重建索引的进程。
统计信息是存储在SQL Server中的列数据的样本。这些数据一般地用于索引列,但是还可以为非索引列创建统计。SQL Server维护某一个索引关键值的分布统计信息,并且使用这些统计信息来确定在查询进程中哪一个索引是有用的。查询的优化依赖于这些统计信息的分布准确 度。查询优化器使用这些数据样本来决定是使用表扫描还是使用索引。当表中数据发生变化时,SQL Server周期性地自动修改统计信息。索引统计被自动地修改,索引中的关键值显着变化。统计信息修改的频率由索引中的数据量和数据改变量确定。例如,如 果表中有10000行数据,1000行数据修改了,那么统计信息可能需要修改。然而,如果只有50行记录修改了,那么仍然保持当前的统计信息。除了系统自 动修改之外,用户还可以通过执行UPDATE STATISTICS语句或者sp_updatestats系统存储过程来手工修改统计信息。使用UPDATE STATISTICS语句既可以修改表中的全部索引,也可以修改指定的索引。
使用SHOWPLAN和STATISTICS IO语句可以分析索引和查询性能。使用这些语句可以更好地调整查询和索引。SHOWPLAN语句显示在连接表中使用的查询优化器的每一步以及表明使用哪一 个索引访问数据。使用SHOWPLAN语句可以查看指定查询的查询规划。当使用SHOWPLAN语句时,应该考虑这些因素。SET SHOWPLAN_ALL语句返回的输出结果比SET SHOWPLAN_TEXT语句返回的输出结果详细。然而,应用程序必须能够处理SET SHOWPLAN_ALL语句返回的输出结果。SHOWPLAN语句生成的信息只能针对一个会话。如果重新连接SQL Server,那么必须重新执行SHOWPLAN语句。STATISTICS IO语句表明输入输出的数量,这些输入输出用来返回结果集和显示指定查询的逻辑的和物理的I/O的信息。可以使用这些信息来确定是否应该重写查询语句或者 重新设计索引。使用STATISTICS IO语句可以查看用来处理指定查询的I/O信息。
就象SHOWPLAN语句一样,优化器隐藏也用来调整查询性能。优化器隐藏可以对查询性能提供较小的改进,并且如果索引策略发生了改变,那么这种优化器隐 藏就毫无用处了。因此,限制使用优化器隐藏,这是因为优化器隐藏更有效率和更有柔性。当使用优化器隐藏时,考虑这些规则:指定索引名称、当 index_id为0时为使用表扫描、当index_id为1时为使用聚簇索引;优化器隐藏覆盖查询优化器,如果数据或者环境发生了变化,那么必须修改优 化器隐藏。
索引调整向导
索引调整向导是一种工具,可以分析一系列数据库的查询语句,提供使用一系列数据库索引的建议,优化整个查询语句的性能。对于查询语句,需要指定下列内容:
查询语句,这是将要优化的工作量
包含了这些表的数据库,在这些表中,可以创建索引,提高查询性能
在分析中使用的表
在分析中,考虑的约束条件,例如索引可以使用的最大磁盘空间
这里指的工作量,可以来自两个方面:使用SQL Server捕捉的轨迹和包含了SQL语句的文件。索引调整向导总是基于一个已经定义好的工作量。如果一个工作量不能反映正常的操作,那么它建议使用的索 引不是实际的工作量上性能最好的索引。索引调整向导调用查询分析器,使用所有可能的组合评定在这个工作量中每一个查询语句的性能。然后,建议在整个工作量 上可以提高整个查询语句的性能的索引。如果没有供索引调整向导来分析的工作量,那么可以使用图解器立即创建它。一旦决定跟踪一条正常数据库活动的描述样 本,向导能够分析这种工作量和推荐能够提高数据库工作性能的索引配置。
索引调整向导对工作量进行分析之后,可以查看到一系列的报告,还可以使该向导立即创建所建议的最佳索引,或者使这项工作成为一种可以调度的作业,或者生成一个包含创建这些索引的SQL语句的文件。
索引调整向导允许为SQL Server数据库选择和创建一种理想的索引组合和统计,而不要求对数据库结构、工作量或者SQL Server内部达到专家的理解程度。总之,索引调整向导能够作到以下几个方面的工作:
通过使用查询优化器来分析工作量中的查询任务,向有大量工作量的数据库推荐一种最佳的索引混合方式
分析按照建议作出改变之后的效果,包括索引的用法、表间查询的分布和大量工作中查询的工作效果
为少量查询任务推荐调整数据库的方法
通过设定高级选项如磁盘空间约束、最大的查询语句数量和每个索引的最多列的数量等,允许定制推荐方式
图解器
图解器能够实时抓取在服务器中运行的连续图片,可以选取希望监测的项目和事件,包括Transact-SQL语句和批命令、对象的用法、锁定、安全事件和 错误。图解器能够过滤这些事件,仅仅显示用户关心的问题。可以使用同一台服务器或者其他服务器重复已经记录的跟踪事件,重新执行那些已经作了记录的命令。 通过集中处理这些事件,就能够很容易监测和调试SQL Server中出现的问题。通过对特定事件的研究,监测和调试SQL Server问题变得简单多了。
查询处理器
查询处理器是一种可以完成许多工作的多用途的工具。在查询处理器中,可以交互式地输入和执行各种Transact-SQL语句,并且在一个窗口中可以同时 查看Transact-SQL语句和其结果集;可以在查询处理器中同时执行多个Transact-SQL语句,也可以执行脚本文件中的部分语句;提供了一 种图形化分析查询语句执行规划的方法,可以报告由查询处理器选择的数据检索方法,并且可以根据查询规划调整查询语句的执行,提出执行可以提高性能的优化索 引建议,这种建议只是针对一条查询语句的索引建议,只能提高这一条查询语句的查询性能。
系统为每一个索引创建一个分布页,统计信息就是指存储在分布页上的某一个表中的一个或者多个索引的关键值的分布信息。当执行查询语句时,为了提高查询速度 和性能,系统可以使用这些分布信息来确定使用表的哪一个索引。查询处理器就是依赖于这些分布的统计信息,来生成查询语句的执行规划。执行规划的优化程度依 赖于这些分布统计信息的准确步骤的高低程度。如果这些分布的统计信息与索引的物理信息非常一致,那么查询处理器可以生成优化程度很高的执行规划。相反,如 果这些统计信息与索引的实际存储的信息相差比较大,那么查询处理器生成的执行规划的优化程度则比较低。
查询处理器从统计信息中提取索引关键字的分布信息,除了用户可以手工执行UPDATE STATISTICS之外,查询处理器还可以自动收集统计这些分布信息。这样,就能够充分保证查询处理器使用最新的统计信息,保证执行规划具有很高的优化 程度,减少了维护的需要。当然,使用查询处理器生成的执行规划,也有一些限制。例如,使用执行规划只能提高单个查询语句的性能,但是可能对整个系统的性能 产生正面的或者付面的影响,因此,要想提高整个系统的查询性能,应该使用索引调整向导这样的工具。
结论
在以前的SQL Server版本中,在一个查询语句中,一个表上最多使用一个索引。而在SQL Server 7.0中,索引操作得到了增强。SQL Server现在使用索引插入和索引联合算法来实现在一个查询语句中的可以使用多个索引。共享的行标识符用于连接同一个表上的两个索引。如果某个表中有一 个聚簇索引,因此有一个聚簇键,那么该表上的全部非聚簇索引的叶节点使用该聚簇键作为行定位器,而不是使用物理记录标识符。如果表中没有聚簇索引,那么非 聚簇索引继续使用物理记录标识符指向数据页。在上面的两种情况中,行定位器是非常稳定的。当聚簇索引的叶节点分开时,由于行定位器是有效的,所以非聚簇索 引不需要被修改。如果表中没有聚簇索引,那么页的分开就不会发生。而在以前的版本中,非聚簇索引使用物理记录标识符如页号和行号,作为行的定位器。例如, 如果聚簇索引(数据页)发生分解时,许多记录行被移动到了一个新的数据页,因此有了多个新的物理记录标识符。那么,所有的非聚簇索引都必须使用这些新的物 理记录标识符进行修改,这样就需要耗费大量的时间和资源。
索引调整向导无论对熟练用户还是新用户,都是一个很好的工具。熟练用户可以使用该向导创建一个基本的索引配置,然后在基本的索引配置上面进行调整和定制。新用户可以使用该向导快速地创建优化的索引。
参考:

5. 关于软考中数据库系统工程师

数据库系统工程师级考试大纲
一、考试说明
1.考试要求
(1)掌握计算机体系结构以及各主要部件的性能和基本工作原理;
(2)掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识;
(3)熟练掌握常用数据结构和常用算法;
(4)熟悉软件工程和软件开发项目管理的基础知识;
(5)熟悉计算机网络的原理和技术;
(6)掌握数据库原理及基本理论;
(7)掌握常用的大型数据库管理系统的应用技术;
(8)掌握数据库应用系统的设计方法和开发过程;
(9)熟悉数据库系统的管理和维护方法,了解相关的安全技术;
(10)了解数据库发展趋势与新技术;
(11)掌握常用信息技术标准、安全性,以及有关法律、法规的基本知识;
(12)了解信息化、计算机应用的基础知识;
(13)正确阅读和理解计算机领域的英文资料。
2. 通过本考试的合格人员能参与应用信息系统的规划、设计、构建、运行和管理,能按照用户需求,设计、建立、运行、维护高质量的数据库和数据仓库;作为数据管理员管理信息系统中的数据资源,作为数据库管理员建立和维护核心数据库;担任数据库系统有关的技术支持,同时具备一定的网络结构设计及组网能力;具有工程师的实际工作能力和业务水平,能指导计算机技术与软件专业助理工程师(或技术员)工作。
3. 本考试设置的科目包括
(1)信息系统知识,考试时间为150分钟,笔试;
(2)数据库系统设计与管理,考试时间为150分钟,笔试。
二、考试范围
考试科目1:信息系统知识
1. 计算机系统知识
1.1 硬件知识
1.1.1 计算机体系结构和主要部件的基本工作原理
•CPU和存储器的组成、性能、基本工作原理
•常用I/O设备、通信设备的性能,以及基本工作原理
•I/O接口的功能、类型和特点
•CISC/RISC,流水线操作,多处理机,并行处理
1.1.2 存储系统
•虚拟存储器基本工作原理,多级存储体系
•RAID类型和特性
1.1.3 安全性、可靠性与系统性能评测基础知识
•诊断与容错
•系统可靠性分析评价
• 计算机系统性能评测方法
1.2 数据结构与算法
1.2.1 常用数据结构
•数组(静态数组、动态数组)
•线性表、链表(单向链表、双向链表、循环链表)
•栈和队列
•树(二叉树、查找树、平衡树、遍历树、堆)、图、集合的定义、存储和操作
•Hash(存储位置计算、碰撞处理)
1.2.2 常用算法
•排序算法、查找算法、数值计算、字符串处理、数据压缩算法、递归算法、图的相关算法
•算法与数据结构的关系,算法效率,算法设计,算法描述(流程图、伪代码、决策表),算法的复杂性
1.3 软件知识
1.3.1 操作系统知识
•操作系统的类型、特征、地位、内核(中断控制)、进程、线程概念
•处理机管理(状态转换、同步与互斥、信号灯、分时轮转、抢占、死锁)
•存储管理(主存保护、动态连接分配、分段、分页、虚存)
•设备管理(I/O控制、假脱机、磁盘调度)
•文件管理(文件目录、文件的结构和组织、存取方法、存取控制、恢复处理、共享和安全)
•作业管理(作业调度、作业控制语言(JCL)、多道程序设计)
•汉字处理,多媒体处理,人机界面
•网络操作系统和嵌入式操作系统基础知识
•操作系统的配置
1.3.2 程序设计语言和语言处理程序的知识
• 汇编、编译、解释系统的基础知识和基本工作原理
• 程序设计语言的基本成分:数据、运算、控制和传输,程序调用的实现机制
• 各类程序设计语言的主要特点和适用情况
1.4 计算机网络知识
•网络体系结构(网络拓扑、OSI/RM、基本的网络协议)
•传输介质,传输技术,传输方法,传输控制
•常用网络设备和各类通信设备
•Client/Server结构、Browser/Server结构、Browser/Web/Datebase结构
•LAN拓扑,存取控制,LAN的组网,LAN间连接,LAN-WAN连接
•因特网基础知识及应用
•网络软件
•网络管理
•网络性能分析
•网络有关的法律、法规
2. 数据库技术
2.1 数据库技术基础
2.1.1 数据库模型
•数据库系统的三级模式(概念模式、外模式、内模式),两级映像(概念模式/外模式、外模式/内模式)
•数据库模型:数据模型的组成要素,概念数据模型ER图(实体、属性、关系),逻辑数据模型(关系模型、层次模型、网络模型)
2.1.2 数据库管理系统的功能和特征
•主要功能(数据库定义、数据库操作、数据库控制、事务管理、用户视图)
•特征(确保数据独立性、数据库存取、同时执行过程、排它控制、故障恢复、安全性、完整性)
•RDB(关系数据库),OODB(面向对象数据库),ORDB(对象关系数据库),NDB(网状数据库)
•几种常用Web数据库的特点
2.1.3 数据库系统体系结构
• 集中式数据库系统
• Client/Server数据库系统
• 并行数据库系统
• 分布式数据库系统
• 对象关系数据库系统
2.2 数据操作
2.2.1 关系运算
•关系代数运算(并、交、差、笛卡儿积、选择、投影、连接、除)
•元组演算
•完整性约束
2.2.2 关系数据库标准语言(SQL)
•SQL的功能与特点
•用SQL进行数据定义(表、视图、索引、约束)
•用SQL进行数据操作(数据检索、数据插入/删除/更新、触发控制)
•安全性和授权
•程序中的API,嵌入SQL
2.3 数据库的控制功能
•数据库事务管理(ACID属性)
•数据库备份与恢复技术(UNDO、REDO)
•并发控制
2.4 数据库设计基础理论
2.4.1 关系数据库设计
•函数依赖
•规范化(第一范式、第二范式、第三范式、BC范式、第四范式、第五范式)
•模式分解及分解应遵循的原则
2.4.2 对象关系数据库设计
•嵌套关系、 复杂类型,继承与引用类型
•与复杂类型有关的查询
•SQL中的函数与过程
•对象关系
2.5 数据挖掘和数据仓库基础知识
•数据挖掘应用和分类
•关联规则、聚类
•数据仓库的成分
•数据仓库的模式
2.6 多媒体基本知识
2.6.1 多媒体技术基本概念
•多媒体系统基础知识
•常用多媒体文件格式
2.6.2 多媒体压缩编码技术
•多媒体压缩编码技术
•统计编码
•预测编码
•编码的国际标准
2.6.3多媒体技术应用
•简单图形的绘制,图像文件的处理方法
•音频和视频信息的应用
•多媒体应用开发过程
2.7 系统性能知识
•性能计算(响应时间、吞吐量、周转时间)
•性能指标和性能设计
•性能测试和性能评估
2.8 计算机应用基础知识
•信息管理、数据处理、辅助设计、科学计算,人工智能等基础知识
•远程通信服务及相关通信协议基础知识
3. 系统开发和运行维护知识
3.1 软件工程、软件过程改进和软件开发项目管理知识
•软件工程知识
•软件开发生命周期阶段目标和任务
•软件开发项目基础知识(时间管理、成本管理、质量管理、人力资源管理、风险管理等)及其常用管理工具
•主要的软件开发方法(生命周期法、原型法、面向对象法、CASE)
•软件开发工具与环境知识
•软件质量管理基础知识
•软件过程改进基础知识
•软件开发过程评估、软件能力成熟度评估的基础知识
3.2 系统分析基础知识
•系统分析的目的和任务
•结构化分析方法(数据流图(DFD)和数据字典(DD),实体关系图(ERD),描述加工处理的结构化语言)
•统一建模语言(UML)
•系统规格说明书
3.3 系统设计知识
•系统设计的目的和任务
•结构化设计方法和工具(系统流程图、HIPO图、控制流程图)
•系统总体结构设计(总体布局,设计原则,模块结构设计,数据存取设计,系统配置方案)
•系统详细设计(代码设计、数据库设计、用户界面设计、处理过程设计)
•系统设计说明书
3.4 系统实施知识
•系统实施的主要任务
•结构化程序设计、面向对象程序设计、可视化程序设计
•程序设计语言的选择、程序设计风格
•系统测试的目的、类型,系统测试方法(黑盒测试、白盒测试、灰盒测试)
•测试设计和管理(错误曲线、错误排除、收敛、注入故障、测试试用例设计、系统测试报告)
•系统转换基础知识
3.5 系统运行和维护知识
•系统运行管理知识
•系统维护知识
•系统评价知识
4. 安全性知识
•安全性基本概念(网络安全、操作系统安全、数据库安全)
•计算机病毒的防治,计算机犯罪的防范,容灾
•访问控制、防闯入、安全管理措施
•加密与解密机制
•风险分析、风险类型、抗风险措施和内部控制
5.标准化知识
•标准化意识,标准化的发展,标准出台过程
•国际标准、国家标准、行业标准、企业标准基本知识
•代码标准、文件格式标准、安全标准软件开发规范和文档标准
•标准化机构
6.信息化基础知识
•信息化意识
•全球信息化趋势、国家信息化战略、企业信息化战略和策略
•有关的法律、法规
•远程教育、电子商务、电子政务等基础知识
•企业信息资源管理基础知识
7.计算机专业英语
•掌握计算机技术的基本词汇
•能正确阅读和理解计算机领域的英文资料
考试科目2:数据库系统设计与管理
1.数据库设计
1.1理解系统需求说明
•了解用户需求、确定系统范围
•确定应用系统数据库的各种关系
•现有环境与新系统环境的关系
•新系统中的数据项、数据字典、数据流
1.2 系统开发的准备
•选择开发方法,准备开发环境,制订开发计划
1.3 设计系统功能
•选择系统机构,设计各子系统的功能和接口,设计安全性策略、需求和实现方法,制定详细的工作流和数据流
1.4 数据库设计
1.4.1 设计数据模型
•概念结构设计(设计ER模型)
•逻辑结构设计(转换成DBMS所能接收的数据模型)
•评审设计
1.4.2 物理结构设计
•设计方法与内容
•存取方法的选择
•评审设计与性能预测
1.4.3 数据库实施与维护
•数据加载与应用程序调试
•数据库试运行
•数据库运行与维护
1.4.4 数据库的保护
•数据库的备份与恢复
•数据库的安全性
•数据库的完整性
•数据库的并发控制
1.5 编写外部设计文档
•编写系统说明书(系统配置图、各子系统关系图、系统流程图,系统功能说明、输入输出规格说明、数据规格说明、用户手册框架)
•设计系统测试要求
1.6 设计评审
2. 数据库应用系统设计
2.1 设计数据库应用系统结构
•信息系统的架构(如Client/Server)与DBMS
•多用户数据库环境(文件服务器体系结构、Client/Server体系结构)
•大规模数据库和并行计算机体系结构(SMP、MPP)
•中间件角色和相关工具
•按构件分解,确定构件功能规格以及构件之间的接口
2.2 设计输入输出
•屏幕界面设计,设计输入输出检查方法和检查信息
•数据库交互与连接(掌握C程序设计语言,以及Java、Visual Basic、Visual C++、PowerBuilder、Delphi中任一种开发工具与数据库互连的方法(如何与数据库服务器沟通))
2.3 设计物理数据
•分析事务在数据库上运行的频率和性能要求,确定逻辑数据组织方式、存储介质,设计索引结构和处理方式
•将逻辑数据结构变换成物理数据结构,计算容量(空间代价),确定存取方法(时间效率)、系统配置(维护代价)并进行优化
2.4 设计安全体系
•明确安全等级
•数据库的登录方式
•数据库访问
•许可(对象许可、命令许可、授权许可的方法)
2.5 应用程序开发
2.5.1 应用程序开发
•选择应用程序开发平台
•系统实施顺序
•框架开发
•基础小组的程序开发
•源代码控制
•版本控制
2.5.2 模块划分(原则、方法、标准)
2.5.3 编写程序设计文档
•模块规格说明书(功能和接口说明、程序处理逻辑的描述、输入输出数据格式的描述)
•测试要求说明书(测试类型和目标,测试用例,测试方法)
2.5.4 程序设计评审
2.6 编写应用系统设计文档
•系统配置说明、构件划分图、构件间的接口、构件处理说明、屏幕设计文档、报表设计文档、程序设计文档、文件设计文档、数据库设计文档
2.7 设计评审
3. 数据库应用系统实施
3.1 整个系统的配置与管理
3.2 常用数据库管理系统的应用(SQL Server、Oracle、Sybase、DB2、Access或Visual Foxpro)
•创建数据库
•创建表、创建索引、创建视图、创建约束、创建UDDT(用户自定义类型)
•创建和管理触发器
•建立安全体系
3.3 数据库应用系统安装
•拟定系统安装计划(考虑费用、客户关系、雇员关系、后勤关系和风险等因素)
•拟定人力资源使用计划(组织机构安排的合理性)
•直接安装(安装新系统并使系统快速进入运行状态)
•并行安装(新旧系统并行运行一段时间)
•阶段安装(经过一系列的步骤和阶段使新系统各部分逐步投入运行)
3.4 数据库应用系统测试
•拟定测试目标、计划、方法与步骤
•数据加载,准备测试数据
•指导应用程序员进行模块测试进行验收
•准备系统集成测试环境测试工具
•写出数据库运行测试报告
3.5 培训与用户支持
4.数据库系统的运行和管理
4.1 数据库系统的运行计划
•运行策略的确定
•确定数据库系统报警对象和报警方式
•数据库系统的管理计划(执行,故障/恢复,安全性,完整性,用户培训和维护)
4.2 数据库系统的运行和维护
•新旧系统的转换
•收集和分析报警数据(执行报警、故障报警、安全报警)
•连续稳定的运行
•数据库维护(数据库重构、安全视图的评价和验证、文档维护)
•数据库系统的运行统计(收集、分析、提出改进措施)
•关于运行标准和标准改进一致性的建议
•数据库系统的审计
4.3 数据库管理
•数据字典和数据仓库的管理
•数据完整性维护和管理(实体完整性、参照完整性)
•数据库物理结构的管理(保证数据不推迟访问)
•数据库空间及碎片管理
•备份和恢复(顺序、日志(审计痕迹)、检查点)
•死锁管理(集中式、分布式)
•并发控制(可串行性、锁机制、时间戳、优化)
•数据安全性管理(加密、安全、访问控制、视图、有效性确认规则)
•数据库管理员(DBA)职责
4.4 性能调整
•SQL语句的编码检验
•表设计的评价
•索引的改进
•物理分配的改进
•设备增强
•数据库性能优化
4.5 用户支持
•用户培训
•售后服务
5. SQL
5.1 数据库语言
•数据库语言的要素
•数据库语言的使用方式(交互式和嵌入式)
5.2 SQL概述
•SQL语句的特征
•SQL语句的基本成分
5.3 数据库定义
•创建数据库(Create Datebase)、创建表(Create Table)
•定义数据完整性
•修改表(Alter Table)、删除表(Drop Table)
•定义索引(Create Index)、删除索引(Drop Index)
•定义视图(Create View)、删除视图(Drop View)、更新视图
5.4 数据操作
•Select语句的基本机构
•简单查询
•SQL中的选择、投影
•字符串比较,涉及空值的比较
•日期时间,布尔值,输出排序
•多表查询
•避免属性歧义
•SQL中的连接、并、交、差
•SQL中的元组变量
•子查询
5.5 完整性控制与安全机制
•主键(Primary Key)约束
•外键(Foreign Key)约束
•属性值上的约束(Null、Check、Create Domain)
•全局约束(Create Assertions)
•权限、授权(Grant)、销权(Revoke)
5.6 创建触发器(Create Trigger)
5.7 SQL使用方式
•交互式SQL
•嵌入式SQL
•SQL与宿主语言接口(Declare、共享变量、游标、卷游标)
•动态SQL
•API
5.8 SQL 标准化
6. 网络环境下的数据库
6.1 分布式数据库
6.1.1 分布式数据库的概念
•分布式数据库的特点与目标
6.1.2 分布式数据库的体系结构
•分布式数据库的模式结构
•数据分布的策略(数据分片、分布透明性)
•分布式数据库管理系统
6.1.3 分布式查询处理和优化
6.1.4 分布式事务管理
•分布式数据库的恢复(故障、恢复、2段提交、3段提交)
•分布式数据库的透明性(局部、分裂、复制、处理、并发、执行)
6.1.5 分布式数据库系统的应用
6.2 网络环境下数据库系统的设计与实施
•数据的分布设计
•负载均衡设计
•数据库互连技术
6.3 面向Web的DBMS技术
•三层体系结构
•动态Web网页
•ASP、JSP、XML的应用
7.数据库的安全性
7.1 安全性策略的理解
•数据库视图的安全性策略
•数据的安全级别(最重要的、重要的、注意、选择)
7.2 数据库安全测量
•用户访问控制(采用口令等)
•程序访问控制(包含在程序中的SQL命令限制)
•表的访问控制(视图机制)
•控制访问的函数和操作
•外部存储数据的加密与解密
8. 数据库发展趋势与新技术
8.1 面向对象数据库(OODBMS)
8.1.1 OODBMS的特征
8.1.2 面向对象数据模型
•对象结构、对象类、继承与多重继承、对象标识、对象包含、对象嵌套
8.1.3 面向对象数据库语言
8.1.4 对象关系数据库系统(ORDBMS)
•嵌套关系
•复杂类型
•继承、引用类型
•与复杂类型有关的查询
•函数与过程
•面向对象与对象关系
•ORDBMS应用领域
8.2 企业资源计划(ERP)和数据库
8.2.1 ERP概述
•基本MRP(制造资源计划)、闭环MRP、ERP
•基本原理、发展趋势
•ERP设计的总体思路(一个中心、两类业务、三条干线)
8.2.2 ERP与数据库
•运行数据库与ERP数据模型之间的关系
•运行数据库与ERP数据库之间的关系
8.2.3 案例分析
8.3 决策支持系统的建立
•决策支持系统的概念
•数据仓库设计
•数据转移技术
•联机分析处理(OLAP)技术
•企业决策支持解决方案
•联机事务处理(OLTP)