1、青岛恒星职业技术学院毕业论文(设计) 11青岛恒星职业技术学院高等职业教育专科_计算机应用技术专业毕业论文(设计)青岛恒星职业技术学院毕业论文(设计)题 目:计算机数据查询优化方法分析姓 名:岳 广 学 号: 0806108_ 指导教师及职称:万 明 傲 所在学院; 信 息 学 院 青岛恒星职业技术学院毕业论文(设计) 222010 年 月 日摘要数据库系统是管理信息系统的核心,是银行、企业、政府等众多部门最为重要的应用。而应用当中,查询操作是重中之重,并且查询操作往往需要花费时间和空间等资源。所以它的效率高低就很大程度上决定了数据库的在整体效率,同时也决定了系统的效率。本文重点围绕数据库的查
2、询优化从需求分析、设计到使用等多方面提出了技术改进和利用为了缩短大数据量的查询处理时间,提高数据库应用系统的效率,提出了针对 SQL 语句进行优化的策略。首先分析了数据库应用系统的时间开销;然后介绍了 SQL 语句执行路径和语句优化的原理; 其次分析SQL 语句优化的通用策略和原则,通过相应的解释加深读者对这些策略和方法的理解;最后总结了SQL 的优化意义以及技术发展的趋势。关键词:数据库;优化;规范;查询青岛恒星职业技术学院毕业论文(设计) 33AbstractThe database system is the core of management information systems,
3、 and also the most important applications in many departments such as banks, enterprises, government and so on. Within the application, the query operation is the most important and it requires time, space and other resources. So its efficiency will largely determine the overall efficiency of the da
4、tabase and the efficiency of the system. This article focuses on the database query optimization and introduces some technological improvements and employment of its demand analysis, design and usage. In order to shorten the large amount of data query processing time, improve the efficiency of the d
5、atabase application system, the paper SQL optimization strategy. Firstly analyzed the time cost database application system, Then introduces the SQL statement optimization path of execution and principle of, Second, the general SQL optimization strategy and principle, through the corresponding expla
6、nation for these strategies and deepening reader understand method, Summarizes the SQL optimization significance and technology development trend.Keywords: Database; Optimization; Specification; Query青岛恒星职业技术学院毕业论文(设计) 44前言随着计算机应用的深入,计算机技术的成熟,各种应用软件的普及,应用数据也随着日常工作而迅速增长,作为数据仓库的数据库的重要性也日益显著。数据库系统是管理信息
7、系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业、政府等部门最为重要的计算机应用之一。从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的 SELECT 语句在 SQL 语句中又是代价最大的语句。举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时。如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见查询优化技术的重要性。数据库系统作为管理信息系统的核心,各种基于数据库的联机事务处理以及联机分析处理正慢慢的转变
8、成为计算机应用的最为重要的部分,根据以往大量的应用实例来看,在数据库的各种操作中,查询操作所占的比重最大,而在查询操作中基于 SELECT 语句在 SQL 语句中又是代价最大的语句。如果在使用中采用了优秀的查询策略,往往可以降低查询的时间,提高查询的效率,由此可见查询优化在数据库中的重要性。本文就数据库查询优化中的策略进行介绍及探索。青岛恒星职业技术学院毕业论文(设计) 55目录摘要 2前言 4第一章 优化过程 51.1 详细的需求分析是优化的基础 .61.4 查询使用中的优化技术 .71.4.2 避免或简化排序 .7第二章查询使用中的优化技术 82.1 因情制宜,建立“适当” 的索引 .82
9、.1.1 深入浅出理解索引结构 92.2 基于索引的优化 92.3.1 正确使用语句 102.3.2 改善 SQL 语句 112.4 其他优化方法 12结束语 13致谢 14参考文献 15第一章 优化过程随着数据库技术的发展,越来越多的数据库应用系统和信息管理系统被开发、使用。而很多数据库应用系统和信息管理系统中,查询功能的要求是必不可少的,也是青岛恒星职业技术学院毕业论文(设计) 66所占的比例最大的。数据库的查询功能优化规划好的话,整个系统的效率会有很大的提高,由此可见查询优化规划的重要性。要想整个数据库的查询得到很大程度的优化,就必须要从需求、设计到使用都要进行规划和技术改进1.1 详细
10、的需求分析是优化的基础 数据库设计是从系统的需求出发,结合软硬件相关要求,设计合理能否符合系统需要功能的数据的集合。数据库设计中最基本的是数据库模式的设计。但是,设计一个完善的比较优秀的数据库系统往往是一个反复且周期性的过程。 1.2 利用规范化是优化的关键 在数据库的设计周期中,需要进行逻辑结构设计,这个时候必须进行关系模式的规范化来达到优化数据库的目的。所谓关系规范化就是按统一标准对关系进行优化,从而最大程度上能消除关系数据库中的数据冗余、添加、删除和修改等操作异常以提高关系的质量,不好的关系操作时会有3 个问题:1.冗余度大;2.插入异常;3.删除异常。 规范化理论认为,关系中的各属性是
11、相互关联的,他们互相依赖、互相制约,构成一个结构严谨的整体。按照属性间相关的关系,可大概分类为函数依赖、多值依赖和连接依赖。其中按照函数依赖又可分为部分依赖、完全依赖和传递依赖,根据这三类函数依赖等可得到规范化等级主要有 5种,即第 1 范式(1NF) ,第 2 范式(2NF) ,第 3 范式(3NF) ,BC 范式(BCNF )和第 4 范式(4NF) ,满足这些范式条件的关系模式可在不同程度上避免冗余、插入和更新异常问题。 那么如何进行规范化呢?具体做法是:确定数据依赖,按照数据依赖的理论,逐一分析这组关系模式,确定他们属于第几范式,进行模式分解,逐步消除非主属性对码的部分依赖和传递依赖。
12、在分解过程当中必须遵守以下 2 条原则: 1.无损分解原则 无损分解就是在关系分解过程中,既不丢失数据也不增加数据,同时还能保持原有的函数依赖2.相互独立原则 所谓独立是指分解后的新关系之间相互独立,对一个关系内容的修改不应该影响到另一关系。 1.3 规范化的收尾工作 关系分解必须从实际出发,并不是范式等级越高,分解得越细就越好。若把关系分解得过于琐碎,虽然对于消除数据冗余和更新异常等有好处,但在进行查询操作时往往又需要进行链接,降低查询效率。相反的若是范式等级太低,虽有利于查询,但会造成相关数据冗余、更新异常等情况。因此我们应该根据实际应用行 相关范式的设计。青岛恒星职业技术学院毕业论文(设
13、计) 771.4 查询使用中的优化技术应用项目的实施中,许多程序员在利用一些前端数据库开发工具开发数据库应用程序时,只注重用户界面的华丽,并不重视查询语句的效率问题,导致所开发出来的应用系统效率低下,资源浪费严重。因此,如何设计高效合理的查询语句就显得非常重要。 实际应用中许多程序员认为查询优化是 DBMS 的任务,与程序员所编写的 SQL 语句关系不大,这是错误的。一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的 SQL 语句的集合,查询规划是经过优化处理之后所产生的语句集合。在实际的数据库产品的高版本中都是采用基于代价的优化方法,这种优化能根据从系统字典表所得到的信息来
14、估计不同的查询规划的代价,然后选择一个较优的规划。虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的 SQL 语句是系统优化的基础,很难设想一个原本糟糕的查询计划经过系统的优化之后会变得高效,因此用户所写语句的优劣至关重要。下面重点说明改善用户查询计划的常用解决方案。 1.4.1 合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用 IBM 最先提出的 ISAM 索引结构。索引的使用要恰到好处,其使用原则如下: 在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。 在频繁进行排序或分组
15、的列上建立索引。 在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“ 性别” 列上只有 “男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。如果待排序的列有多个,可以在这些列上建立复合索引(compound index )。 1.4.2 避免或简化排序 应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。 1.4.3 消除对大型表行数据的顺序存取 在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套 3 层
16、的查询,如果每层都查询 1000 行,那么这个查询就要查询 10 亿行数据。避免这种情况的主要方法就是对连接的列进行索引。还可以使用并集来避免顺序存取。 1.4.4 避免相关子查询 一个列的标签同时在主查询和 where 子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果青岛恒星职业技术学院毕业论文(设计) 88子查询不可避免,那么要在子查询中过滤掉尽可能多的行。 1.4.5 避免困难的正规表达式 LIKE 关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:SELECT FROM cus
17、tomer WHERE zipcode LIKE “98_ _ _” 即使在 zipcode 字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT FROM customer WHERE zipcode “98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。 1.4.6 使用临时表加速查询 把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。 1.4.7 字段提取要按照“需多少、提多少”的原则 避免“select *”,尽量使用“select 字段 1,字段 2,字段 3”。实践证明:每少
18、提取一个字段,数据的提取速度就会有相应的提升。提升的速度还要看您舍弃的字段的大小来判断。第二章查询使用中的优化技术 2.1 因情制宜,建立“适当”的索引建立“适当”的索引是实现查询优化的首要前提。索引(index)是除表之外另一重要的、用户定义的存储在物理介质上的数据结构。当根据索引码的值搜索数据时,索引提供了对数据的快速访问。事实上,没有索引,数据库也能根据 SELECT语句成功地检索到结果,但随着表变得越来越大,使用“适当”的索引的效果就越来越明显。注意,在这句话中,我们用了“适当”这个词,这是因为,如果使用索引时不认真考虑其实现过程,索引既可以提高也会破坏数据库的工作性能。2.1.1 深
19、入浅出理解索引结构实际上,您可以把索引理解为一种特殊的目录。微软的 SQL SERVER 提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别:青岛恒星职业技术学院毕业论文(设计) 99其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a
20、”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正
21、的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是 672 页,检字表中“张”的上面是“驰”字,但页码却是63 页,“张”的下面是“弩”字,页面是 390 页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。 我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。通过以上例子,我们可以理解到什么是“聚集索引”和“非聚集索引”。进一
22、步引申一下,我们可以很容易的理解:每个表只能有一个聚集索引,因为目录只能按照一种方进行排序。2.2 基于索引的优化 数据库的优化方法多种多样,不同的方法对提高数据库查询效率也不相同。 索引作为数据库中的重要数据结构,它的根本目的就是为了提高查询的效率。而优化查询的重要方法就是建立索引,建立适合关系数据库系统的索引,这样就可以避免表扫描,并减少了因为查询而造成的输入输出开销,有效提高数据库数据的查询速度,优化了数据库性能。然而在创建索引时也增加了系统时间和空间的开销。所以创建索引时应该与实际查询需求相结合,这样才能实现真正的优化查询。2.1 判断并建立必要的索引 对所要创建的索引进行正确的判断,
23、使所创建的索引对数据库的工作效率提高有所帮助。为了实现这一点,我们应做到以下要求:在熟记数据库程序中的相关 SQL 语句的前提下,统计出常用且对性能有影响的语句;判断数据库系统中哪些表的哪些字段要建立索引。其次,对数据库中操作频繁的表,数据流量较大的表,经常需要与其他表进行连接的表等,要进行重 点关注。这些表上的索引将对 SQL 语句的性能产生重要的影响。 2.2 对索引使用的一些规则 索引的使用在一些大型数据库系统中会经常使用到,这样可以有效的提高数据库性能,使数据库的访问速度得到提高。但索引的使用要恰倒好处,所以我们在使用索引时应遵守使用原则:建立索引可以提高数据库的查询速度,但索引过多,
24、不但不能实现优化查询,反而会影响到数据库的整体性能。索引作为数据库中实际存在的对象,每个索引都要占用一定的物理空间。所以对于索引的建立要考虑到物理空间容量,以及所建立索引的必要性和实用性。 2.3 合理的索引对 SQL 语句的意义 索引建立之后,还要确保其得到了真正的使用,发挥了其应青岛恒星职业技术学院毕业论文(设计) 1010有的作用。首先,可以通过 SQL 语句查询来确定所建立的索引是否得到了使用,找出没有使用到的索引。分析索引建立但没有使用的原因,使其真正发挥作用。其次,索引得到使用以后,是否得到了预期的效果,对数据库的性能是否实现了真正意义上的提高,只有合理的索引才能真正提高数据库的性
25、能。 2.3 优化 SQL 语句 2.3.1 正确使用语句在使用索引时可以有效的提高查询速度,但如果 SQL 语句使用不恰当的话,所建立的索引就不能发挥其作用。所以我们应该做到不但会写 SQL,还要写出性能优良的 SQL 语句 下面,就如何优化引用例子进行说明。初探J.计算机系统应用计术首先,在进行查询时,返回的值应该是查询所需要的。在查询中应该尽量减少对数据库中的表的访问行数,使查询的结果范围最小,这就意味着在查询时,不能过多的使用通配符,如:select*from table1 语句,而应该做到最小化查询范围,要查询几行几列就选择几行几列,如:select col1 from table1
26、;多数情况下,用户并不需要查询到的所有数据,而只是部分或靠前的数据时,我们也可以通过 SQL 语句来进行限制查询的结果,如:select top 50 col1 from table1。 其次,对于一些特殊的 SQL 语句,在使用时应正确选择。我们用一组例子来说明,如:EXISTS,NOT EXISTS。 语句一:select sum(t1.c1) from t1 where(select count(*)from t2 where t2.c2=t1.c2)0) 语句二:select sum(t1.c1) from t1 where exists(select*from t2 where t2
27、.c2=t1.c1) 两个语句所得到的结果相同,但,语句二的效率要远高于语句一,因为语句一在查询中产生了大量的索引扫描。 在对数据库查询时,所使用的语句多种多样,但选择恰当的的字句能够有效的提高查询效率。 最后,WHERE 子句在使用时应该注意的问题。 在 WHERE 子句中可以使用 exist 和 not exist 代替 in 和 not in。应该尽量避免使用in,not in,or 或者 having。可以使用表链接代替 exist。Having 可以用 where 代替,如果无法代替可以分两步处理。2.3.2 改善 SQL 语句很多人不知道 SQL 语句在 SQL SERVER 中是
28、如何执行的,他们担心自己所写的 SQL 语句会被 SQL SERVER 误解。比如:select * from table1 where name=zhangsan and tID 10000和执行:select * from table1 where tID 10000 and name=zhangsan一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果 tID 是一个聚合索引,那么后一句仅仅从表的 10000 条以后的记录中查找就青岛恒星职业技术学院毕业论文(设计) 1111行了;而前一句则要先从全表中查找看有几个 name=zhangs
29、an的,而后再根据限制条件条件tID10000 来提出查询结果。事实上,这样的担心是不必要的。SQL SERVER 中有一个“查询分析优化器”,它可以计算出where 子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间,也就是说,它能实现自动优化。虽然查询优化器可以根据 where 子句自动的进行查询优化,但大家仍然有必要了解一下“查询优化器”的工作原理,如非这样,有时查询优化器就会不按照您的本意进行快速查询。在查询分析阶段,查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一个阶段可以被用作一个扫描参数(SARG),那么就称之为可优化的,并且可以利用索引快速获得所需数据。
30、SARG 的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的 AND 连接。形式如下:列名 操作符 或操作符列名列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如:Name=张三价格500050005000如果一个表达式不能满足 SARG 的形式,那它就无法限制搜索的范围了,也就是 SQL SERVER 必须对每一行都判断它是否满足 WHERE 子句中的所有条件。所以一个索引对于不满足 SARG 形式的表达式来说是无用的。介绍完 SARG 后,我们来总结一下使用 SARG 以及在实践中遇到的和某些资料上结论不同的经验:原因是通配符
31、%在字符串的开通使得索引无法使用。2、or 会引起全表扫描Name=张三 and 价格5000 符号 SARG,而:Name=张三 or 价格5000 则不符合 SARG。使用 or 会引起全表扫描。2.4 其他优化方法 数据库的查询优化方法不仅仅是索引和 SQL 语句的优化,其他方法的合理使用同样也能很好的对数据库查询功能起到优化作用。我们就来列举几种简单实用的方法。 3.1 避免或简化排序 应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。 3.2 避免相关子查询 如果在主查询和 WHERE 子句中的查询中同时出现了一个列的标签,这样
32、青岛恒星职业技术学院毕业论文(设计) 1212就会使主查询的列值改变后,子查询也必须重新进行一次查询。因为查询的嵌套层次越多,查询的效率就会降低,所以我们应当避免子查询。如果无法避免,就要在查询的过程中过滤掉尽可能多的。3.3 创建使用临时表 在表的一个子集进行排序并创建临时表,也能实现加速查询。在一些情况下这样可以避免多重排序操作。但所创建的临时表的行要比主表的行少,其物理顺序就是所要求的顺序,这样就减少了输入和输出,降低了查询的工作量,提高了效率,而且临时表的创建并不会反映主表的修改。 3.4 用排序来取代非顺序存取 磁盘存取臂的来回移动使得非顺序磁盘存取变成了最慢的操作。但是在 SQL
33、语句中这个现象被隐藏了,这样就使得查询中进行了大量的非顺序页 查询,降低了查询速度,对于这个现象还没有很好的解决方法,只能依赖于数据库的排序能力来替代非顺序的存取。转贴于 中国论文下载中心 http:/www.stud 。结束语从范式优化、索引优化、表的优化及查询优化探讨数据库优化设计的方法并对它们的综合使用进行分析。数据库优化设计时在逻辑设计阶段要根据范式优化及表优化中的要求设计数据库逻辑结构,对两者的利弊进行权衡,选出折衷的方案既可以避免不一致性和数据异常现象又不影响整体的性能;在数据库物理设计阶段要根据索引优化中的要求在有关属性或属性的组合上建立索引,以优化数据库物理结构;在数据库查询阶
34、段采用在条件子句中使用索引,嵌套查询,迟早执行选择操作迟早消除不满足条件的记录,分组计数和避免困难的正规表达式 6 种优化策略对于数据库的优化,我们要抓住关键问题,提出改善查询效率,这样才能真正使数据库服务得到根本提高。本文在对数据库查询优化的方法上,进行了分析,提出了部分见解,有效的提高数据库查询效率。 数据库查询优化是一项综合性工作,受到各种各样因素的制约,有些要求往往是彼此矛盾的。因此设计者必须根据实际情况,综合应用上述技术,在基本合理的总体设计的基础上,对数据库查询做青岛恒星职业技术学院毕业论文(设计) 1313一些优化调整,力求最大限度地提高操作效率,减少异常等,满足用户各种各样的要
35、求,实现数据库的查询优化设计致谢当我写完这篇毕业论文的时候,有一种如释重负的感觉,在经历了找工作的焦灼、写论文的煎熬之后,感觉好像一切都尘埃落定,想起了那句伤感的歌词:“Time to say goodbye.”即将给自己的学生时代和校园生活划上一个分号,之所以说它是分号,是因为我对无忧无虑的学生生活还有无比的怀念,对单纯美好的校园生活还有无比的向往。这只是我生命中的一个路口,并不是终点,我始终相信青春不会散场,坚信有一天会重返校园,以学生或老师的身份去延续这种快乐和幸福。 感谢我的母校恒星职业技术学院尤其感谢信息学院所有的老师们,是你们让我在这片净土读书三载,无形中塑造了我生命的气质、生活的
36、方式,也练就了我乐观的心态和一颗感恩的心。无论是为人还是为学都是我生活上和学术上的引路人,感激之情无以言表,只能在日后的工作和学习中踏实做人、勤奋做事,做出一番成绩来回报他对我的恩惠。 在毕业前最后的时光,仍旧要感谢我生命中出现的那些我结识的十分重要朋友们。他们不仅在学习上给予我指点,同时也是我生活中一起同行的人,在交往的过程中我们建立信任、彼此鼓励、互相支持与帮助。 当然,在我求学期间,还要感谢我深爱的父母亲一直以来对我无怨无悔的付出、支持、关爱、尊重和信任,在我学习、生活、感情、工作上遇到困难时,是您们帮我抵御风霜,谢谢您们。我是青岛恒星职业技术学院毕业论文(设计) 1414幸运而幸福的,
37、我知足并且义无反顾的在大家的关爱下坚持自己的信念和理想一路前行。参考文献 1萨师煊.数据库系统概论M.北京: 高等教育出版社,2000 2王能斌.数据库系统原理M. 北京: 电子工业出版社,2000 3李芳.关系数据库设计的优化技术J. 现代电子技术,2003,9 5袁长河.Sybase SQLserver 性能优化技6王珊,孟小峰 数据库系统导论(第七版) 机械工业 出版社.2000 年 10 月 7王磊,王熙宁 网上考试系统的性能与安全分析.情报 科学.2004 年 22 期. 8Abnhrmx Silbersehaa数据库系统概念.机械工业出版社 2006 年 10 月9 单国栋, 戴英
38、侠, 王航. 计算机漏洞分类研究. 计算机工程,2002,28(10):3-6 10 夏云庆 编著 Visual C+ 6.0 数据库高级编程 北京希望电子出版社 11 段钢 编著 加密与解密(第二版) 电子工业出版社 12 候俊杰著 深入浅出 MFC 第 2 版 华中科技大学出版社13天极网新技术研究室.ASP.NET 完全入门.重庆出版社 ,200114Scott Worley 著.ASP.NET 技术内幕.王文龙 刘湘宁译.人民邮电出版社,2002 本文来自织梦 15Sanjeev Rohilla, Senthil Nathan, Surbhi Malhotra 著.ADO.NET 专业项目实例开发.陈君 王宝良译.中国水利水电出版社,200316丁晟春 王曰芬.网站新闻发布管理系统的设计与应用 .现代图书情报技术.