时间:2023-03-06 15:56:37
引言:寻求写作上的突破?我们特意为您精选了4篇数据库管理系统范文,希望这些范文能够成为您写作时的参考,帮助您的文章更加丰富和深入。
1 背景分析
目前,产品化的数据库管理系统是以关系型数据库为主流,技术相对成熟。面向对象的数据库管理系统尽管技术上处于先进,数据库易于研发、维护,但至今为止,还没有成熟的产品。占主导位置的关系型数据库管理系统包括ORACLE、SYBASE、SQL Server、INFORMIX与INGRES,这些产品都支持UNIX、VMS、WINDOWS等不同平台,但支持的程度不一样。
通常系统的设计与研发阶段,设计人员、研发人员与测试人员仅会把工作重点放在系统的功能实现上,而此时因为测试数据较小,难以衡量系统的运行性能的优劣,然而如果系统进入实际运行阶段,大量的业务数据通常会使系统的性能逐步降低,此时再来考虑怎样提升性能则会花费更多的人力及财力。所以,设计出高质量的数据库结构就变得特别关键。
2 数据库服务器选择
对于占主导位置的SQL Server、Oracle、SYBASE、DB2和INFORMIX数据库,分别从性能、运用风险、开放性、易维护性与价格等方面来分析比较。
2.1 性能
SQL Server老版本服务器多用户时性能较差,新版本的性能有了显著的提升,各项处理能力都有了显著的提升,占有数项TPC-C(事务处理性能委员会)纪录,并支持集群。Oracle数据库性能最佳,占有Windows NT平台下的TPC-D(基准测试,衡量联机事务处理系统的一个测试指标)及TPC-C的世界纪录。SYBASE数据库性能较好,满足Sun、IBM、HP、Compaq及Veritas集群设施的性能,达到高可用性;性能比SQL Server稍差,然而在UNIX平台下的并发性要高于SQL Server,适用于安全性要求较高的应用系统。DB2适合于数据仓库与在线事务处理,性能较好,支持胖客户端和应用模式。INFORMIX性能较好,支持集群,达到高可用性,适用于安全性要求极高的应用系统,特别是在金融业、证券行业的应用。
2.2 运用风险
SQL Server属于完全重写的代码,性能及版本兼容性有了较大的改善,同Oracle、DB2的性能差距显著减小。该产品的产生经历了大量用户长期的测试,对产品的安全及稳定进行了全面的检测,安全稳定性有了显著的改善。Oracle长时期的研发经验,完全向下版本兼容,基本没有风险。能够安全的进行系列产品的升级,在企业、政府中获得普遍应用。而且假如在WINNT平台上不能满足数据的要求,能够安全的将数据转移到UNIX平台上来。SYBASE向下版本兼容,然而ct-library程序不易移植。研发周期较长,升级较为复杂,稳定性较佳,数据安全有保障,风险较小。在安全要求极高的金融、证券领域获得了普遍应用。DB2在巨型企业获得普遍的应用,向下版本兼容性较好,应用风险较小。INFORMIX研发周期较长,升级较为复杂,稳定性较佳,数据安全有较高保障,应用风险较小。在安全要求极高的金融、证券领域中获得了普遍应用。
2.3 开放性
SQL Server仅能在Windows平台上部署、运行,C/S结构,操作系统的稳定对数据库是非常关键的。仅支持Windows平台,能够用ADO、DAO、OLEDB、ODBC、JDBC等网络数据库连接技术沟通。Windows平台的可靠性和安全性通过了最高级别的C2认证,在处理大数据量的重要业务时具备较好的性能。Oracle能在所有主流平台上部署、运行(包含 Windows),完全支持目前所有的工业标准。利用完全开放策略,可以进行多层次网络计算,对多种工业规范提供支持,能够用ODBC、JDBC、OCI等网络数据库连接技术沟通。能够使客户选用最适合的解决方案,对开发商完全支持。SYBASE能在所有主流平台上部署、运行,C/S结构,能够用ODBC、JDBC、Jconnect、Ct-library等网络数据库连接技术沟通,在金融业中获得了普遍的应用。但因为早期Sybase同OS集成度不高,所以VERSION11.9.2以下版本需要较多OS及DB级补丁,在多平台的混合环境下会产生一定问题。DB2能在所有主流平台上部署、运行(包含windows)。有较佳的开放性,最适于海量数据。支持跨平台能力和多层结构,支持ODBC、JDBC等类型应用系统,在大型的国际企业中获得最为普遍的应用。IINFORMIX仅运行于UNIX平台,包括SUNOS(Sun的操作系统最初称呼)和HPUX(Hewlett C Packard UNIX的缩写,属于惠普公司的UNIX操作系统),在金融业获得普遍的应用。
2.4 易维护性与价格
SQL Server从易维护性与价格上SQL Server占有较大优势。基于Microsoft产品的一贯风格,SQL Server的图形管理界面导致了显著的易用性,微软的数据库管理员培训工作相对充分,能够轻松的找到技术较好的数据库管理员,数据库管理费用相对低,SQL Server的价格也是较低的。Oracle从易维护性与价格体来说,Oracle的价格是相对高的,管理相对复杂,因为Oracle的应用相当普遍,经验丰富的Oracle数据库管理员能够相对容易的找到,因而实现Oracle的良好管理。所以,Oracle的性价比在商用数据库中是最佳的。SYBASE的价格是相对低的,然而SYBASE的在企业及政府中的应用较少,较难找到经验丰富的管理员,运行管理费用偏高。DB2价格较高,管理员较少,在中国的应用相对少,只在金融业获得一定应用,运行管理费用都非常高,比较适用于大型企业的数据仓库应用。INFORMIX价格在这些数据库服务器中居于中间,同SYBASE类似,在企业及政府中应用相对较少,只在金融业获得了普遍的应用。经验丰富的管理人员偏少,运行管理费用偏高。
3 数据库设计
数据库结构设计在该数据库管理系统研发过程中占据非常关键的地位,下面从数据库设计原则、数据库设计方法与步骤、逻辑数据模型设计等三方面简述该数据库管理系统数据库设计。
3.1 数据库设计原则
该数据库管理系统的数据库参照以下设计原则:
(1)数据库设计要达到标准化与规范化。数据结构的标准化与数据关系的规范化有助于消除冗余数据。
(2)表中数据类型的合理化。合理的数据类型有助于提升该数据库管理系统数据库的运行性能。
(3)数据表命名的规范化。每个关系型数据库对数据表的命名都有一定要求,在对数据表命名时利用大小写敏感的形式,而且数据表命名长度不应过长,这样能够使该数据库管理系统可以应用在多个不同的数据库平台。
(4)数据库性能的完善。在运行环境已经固定的因素下,数据库的性能成为影响该人事数据库管理系统运行性能的主要条件。可以利用两个步骤开展数据库设计:先是进行逻辑设计,而后进行物理设计。逻辑设计要求消除所有的冗余字段,可以完整地说明数据库表之间的关系。然而对于多表之间关联的查询,去除所有冗余会损耗系统性能,也会增大系统研发难度。因此,找到一个平衡点成为数据库设计的关键,在物理设计中开发人员要分析关联数据表的数据量大小与访问频率,并对数据表中用来关联查询的关键字段留存适当的冗余,以提升数据库的性能。
3.2 数据库设计方法与步骤
数据库的建设分成概念数据模型设计、逻辑数据模型设计与物理数据结构设计等三个阶段,其目的是达到合理的数据表结构,使数据的存取操作更为有序,数据的编辑、查询更为方便,从而实现该数据库管理系统数据库的建设。
(1)概念数据模型设计。概念数据模型反映的是系统最终用户对于数据存储的观点,代表了系统用户综合性的信息需求,它用数据类的方式表达企业级的数据需求,数据类描述了在业务环境中聚集起来的几个重要的类别数据。概念数据模型包括主要的实体和实体之间的关系。描述概念数据模型最常用的是“实体-关系”图(即E-R图),E-R图主要是由实体、属性及关系等三个要素组成的。
(2)逻辑数据模型设计。逻辑数据模型是指系统分析师、设计师对数据存储的见解、看法,是对前一阶段概念数据模型的分解与细化。逻辑数据模型是按照业务规则决定的,是业务对象、业务对象的数据项以及业务对象之间关系的描述。逻辑数据模型包括所有的实体与关系,决定每个实体的属性,指明每个实体的主键和外键。
(3)物理数据模型设计。物理数据模型是对真实数据库的表达。数据库对象包括表,视图、字段、数据类型、长度、主键、外键、索引以及是否可为空,还有默认值。概念数据模型到物理数据模型的转换是将概念模型中的对象转换为物理模型的对象。
4 总结
开发数据库管理系统时,一个优秀的数据库服务器的选择和好的数据库结构设计起到举足轻重的地位。SQL Server属于微软公司研发的大型关系型数据库系统,功能相对全面,效率较高,管理与操作比较简单、方便,整个系统的安全及稳定也较高,并且性能价格比最好,节约企业资金,降低研发成本,是开发人员理想的选择,能够作为中型企业或单位的数据库平台。数据库结构设计在数据库管理系统研发过程中同样占据非常关键的地位,一个好的数据库结构是该数据库管理系统的基础,数据结构设计的优劣将直接影响到该系统的效率以及所要达到的效果。
1系统概况
1.1系统环境硬件:微机及打印机各1台,软件:丹诚公司的DataTrans-1000图书馆集成系统,汉字操作系统Windows98以上。
2对图书馆工作人员业务素质的基本要求
2.1必须执证上岗图书馆工作人员应精通图书情报专业的理论技术及方法,并能熟练地应用于工作实践:熟悉CNMAR和USMRC标准分类法(中国图书分类代码和国际图书分类代码);MARC(即机读目录格式)是图书馆计算机系统编制、识别、存贮、检索和处理文献目录形式及数据的基本格式。可通过参加MARC培训班学习,取得合格证后方能上岗。
2.2业务素质要求有阅读、分析、概括、提炼图书资料主题并能较准确地进行归类的能力:会使用工具书解决分类标引中的疑难问题,有广博的基础知识和合理的知识结构。具有一定的生物医学知识,以利于分类、编目质量的提高,并有一定的外语水平,以利于提高阅读、编译能力。
2.3掌握计算机操作能掌握计算机的基本知识和操作维护技术:能对有关数据库和网上信息进行查询、阅读和筛选。
2.4熟悉现代管理的理论、技术与方法能创造性地应用于管理实践,具有服务意识,善于宣传图书馆和推广利用信息产品,并能够通过服务效果评价图书馆的效能。
2.5能够培训用户(读者)和进行阅读辅导使读者提高计算机操作和自行检索文献的能力和文献利用能力。
3数据库的建立及应用
3.1我馆采用丹诚公司的DataTrans-1000是Internet时代的专业化图书馆业务软件,它为我们的业务工作带来了标准化和高效率,为图书馆业务迅速切入全球网络信息共享大环境提供了一个高起点[1]。它是目前国内图书馆界性能价格比较高的管理软件之一,也是国内唯一被图书馆用于正式联机编目服务的系统,用户公认的可扩充性强,对机读目录格式标准支持较充分的图书馆集成系统[2]。
3.2书目文献资源库的建立书目数据库是图书馆自动化的基础,数据库质量是图书馆自动化、网络化稳定发展的保证。建库方式有两种:①套录。书目数据套录就是通过查询光盘数据库、成员馆书目数据库、联合编目中心等数据库,套录所需的书目数据到本馆编目系统中的过程,书目数据套录是目前普遍采用的编目手段[3]。大量使用网上或外部的机读书目数据方式,可以提高分编效率,促进编目工作朝着标准化、规范化迈进。既减少了工作量,又加速了馆内书目数据库的建立。我馆采用的是深圳市图书馆CNARC格式制作的数据。②自建。依据软件中规定数据录入规范的数据,这种方式针对性强,首先应狠抓数据录入关,保证数据的准标格式,其次还应加强录入人员的责任感,及时核对,保证数据的完整性和准确性。编目环节是承前启后的一个关键环节,编目工作的质量直接影响图书馆书目服务的整体水平,编目工作具有一定的学术性,要求编目人员对出版物相关知识有基本了解,能够从图书期刊的内容、形态等方面的特征中把握主要因素,将图书期刊准确地描述和分类。
3.3采购目录的应用采购工作的主要目的是订购图书,建立采购目录,为采购和订购验收统计奠定基础,采购是建立馆藏物品目录的第一个环节,采购环节建立的订购目录记录了订购出版物的基本情况、订购件数和订购价格。
3.4流通管理的应用利用流通系统建立的数据库和读者库,对图书馆收藏的图书进行借阅管理(即流通管理),可以进行借书、还书、续借、过期罚金处理、查询读者借书情况、查询图书库存情况等事务处理工作,同时还可以进行预约借书、读者到馆登记、读者证件挂失等工作。
4系统的功能和特点
4.1集成化将馆藏图书库、典藏库、流通库和读者库有机地融为一体,采购、编目、典藏、流通、公共查询、期刊管理、情报检索、书目控制等功能。
4.2规范化和标准化系统中各种编码严格遵循国家和国际标准,所有数据的著录格式、标引原则均按国家颁布的要求标准执行,以《中国图书馆分类法》第四版进行分类、标引。
4.3数据的一次输入可提供多次多项目的利用可自动打卡、图书总帐统计、分类统计等等,提高了工作质量和工作效率,保证了著录格式和其它登录项目的标准化、统一化、美观化,加快了图书的宣传与流通。
4.4确保了科学的藏书管理可通过分类统计随时了解各学科图书的馆藏情况,从而根据需要采购新书,使有限的财力发挥了它的最大效用。
4.5部分操作简便易学系统设计的检索窗既面向图书采编管理,又可向读者自行检索,读者可通过书名、ISBN号、主题、作者及分类号等进行检索,还可以进入浏览窗进一步选择。
4.6及时、准确、较全面地提供医学图书数据满足了医务人员临床诊治、知识更新、科研教学的各种需要,特别是紧迫性和新颖性的需要,使图书馆为临床医教研服务的水平达到了一个新的高度。
5数据库管理系统的应用体会
5.1硬软件选择根据馆情确定网络规模和机型,一般操作用机应考虑到将来的发展,应用软件的选择应考虑软件的集成化、智能化、标准化、稳定性和可发展性,走出重复开发软件的误区,以免造成人力、物力的巨大重复投资。
5.2保证数据的标准化建库是一项系统工程。建库前应统一分类方法,做好建库前的整理工作,保证数据的标准化。
5.3系统维护中央数据库是自动化管理的核心。系统及数据维护对于图书馆自动化建设来说是相当重要的问题,对图书馆所有工作人员强调网络安全的重要性,并进行一定的计算机安全知识培训。采取一定的防范措施和制定相关管理制度。
5.4加强网络建设、开展馆际合作、实现文献资源共享加强馆际合作可以联合各相同专业的图书馆共同建设数据库,既可以统一建库标准又避免了重复投资。如能实现网络建设,建立文献资源保障体系和共享机制,将一定区域内的医院图书馆联成局域网,各联网图书馆收集、开展并传递信息,在为本院读者服务的同时,也为社会用户、网络用户、远程用户服务。读者可以直接上网适时、适地地查到各联网图书馆的最新馆藏信息,方便快捷,把他们从浩渺无边的书海中解脱出来,这样才能更充分发挥图书馆自动化的优势。
笔者认为:图书馆自动化网络建设是一项艰巨而复杂的工程,我院图书馆自动化系统的运行,不仅彻底改变了以往的工作方式和服务水平,而且证实了在医院图书馆实现标准化、规范化、科学化是行之有效的。检索工作为读者开放,既锻炼其上机的技能,又培养其浓厚的学习兴趣,信息检索最大限度地方便了读者并服务于读者。另外馆员参与建立网络和数据库工作,既提高了其掌握现代化技能的信心和能力,人员素质相对提高,也适应了新形势的发展需要。
【参考文献】
在数据库管理系统中,查询是一个很重要的内容。然而,在多数情况下人们不能准确知道作为查询条件的字段内容,如:某字段内容为“涪陵师范高等专科学校”,查询者可能只知道其简称“涪陵师专”或“涪师专”,这时,为保证能查到满足条件的数据记录,只能进行模糊查询。下面从编程的角度谈谈在FoxPro 2.5b中,实现模糊查询的方法。
一、 简单的模糊查询方法
① 利用比较操作符“=”进行模糊查询。先把SET EXACT的设置置为OFF,这时,“=”用于两个字符表达式之间作比较,其规则是:“=”右边的字符逐个与“=”左边相同位置的字符进行比较,只要遇到其中一个字符不相等,或者“=”右边的字符表达式结束,比较操作就结束。所以,"abc"="abc","abc"="ab","ab_"="ab","ab"=""的比较结果均为逻辑真(.T.)。可见,这种方法的模糊性是不能令人满意的。
② 利用“$”进行包含比较,其模糊查询的效果就比用“=”时好得多。这种方法是在“$”右边的字符表达式中查找“$”左边的字符表达式,若找到返回逻辑真(.T.),否则返回逻辑假(.F.)。用这种方法只要“$”左边的字符表达式的每一个字符在“$”右边的字符表达式中存在且位置不间断,查找就能成功,然而对于诸如前面提到的“涪陵师专”或“涪师专”之类的简称,其查找结果为逻辑假(.F.)。
由此可见,直接利用“=”和“$”进行比较操作是不能太“模糊”的。
二、查询条件为缩略语或简称的模糊查询方法
缩略语或简称在地名、单位名称中使用非常广泛。通常,缩略语或简称是由全称中的某些排列位置不连续的字符组成的,因此,通过设置不同长度的字符串进行比较的规则,或者利用包含比较符“$”,是不能对缩略语或简称进行模糊查询的。这时可编写一通用的自定义函数,将用户输入的查询条件()与字符型字段变量()进行逐字比较,如果是的缩略语或简称,则返回逻辑真(.T.)否则返回逻辑假(.F.),从而实现模糊查询。
下面将作者所编写的自定义函数介绍给读者,以供参考。
设计思想:此函数必须是一个通用函数。为此,执行时可先接受二个参数──和。从的左边开始取其第一、二个字符X1,用AT( )函数测试X1在中的位置S1,如果S1不为0,就将中包含X1以及左边部分的字符截掉,并取中的第三、四个字符X2,用AT( )函数测试X2在的剩余部分中的位置S2,若S2不为0,就将的剩余部分中包含X2以及左边部分的字符截掉……,直到将中的字符取完并在中测试完为止,最后本函数返回逻辑真(.T.)。在这个过程中只要有一次测试不成功(即Sn=0),则退出本函数并返回逻辑假(.F.)。因为一个汉字占二个ASCII字符,所以每次取二个相邻字符进行测试(让ZFBJ.PRG中的K=2)。这样做,一是可以减少测试比较的次数,提高程序运行速度。二是当中含有数字、字母等半角字符时,可以减少满足条件的记录数目,提高查询的命中率。然而,若查询条件中含有英文缩写,则每次只能取一个ASCII字符进行测试(让ZFBJ.PRG中的K=1)。
本函数的源程序如下:
* 程序名称:ZFBJ.PRG
* 程序功能:比较是否为的缩略语
* 调用格式:ZFBJ(,)
* 通常是一个字符型字段变量
* 返 回 值:逻辑值 .T. 或 .F.
* 使用环境:FoxPro 2.5b
PARAMETERS m.FIELD, m.INMC
PRIVATE ALL
IF (PARAMETERS( ) < 2) ;
OR EMPTY(ALLTRIM(m.FIELD)) ;
OR EMPTY(ALLTRIM(m.INMC))
RETURN .F.
ENDIF
IF SET("TALK") = "ON"
SET TALK OFF
m.talkstat = "ON"
ENDIF
m.compstat = SET("COMPATIBLE")
SET COMPATIBLE FOXPLUS
J = LEN(ALLTRIM(m.INMC))
K=2
FOR I = 1 TO J STEP K
m.MC = SUBSTR(ALLTRIM(m.INMC),I,K)
MCWZ = AT(m.MC,ALLTRIM(m.FIELD))
IF MCWZ0
m.FIELD = SUBSTR(ALLTRIM(m.FIELD),MCWZ+K)
fhz = .T.
ELSE
fhz = .F.
EXIT
ENDIF
ENDFOR
IF m.talkstat = "ON"
SET TALK ON
ENDIF
IF m.compstat = "ON"
SET COMPATIBLE ON
ENDIF
RETURN fhz 使用举例:设内存变量m.field,其值为用户输入的用户名称的简称,如“涪师专”,现在要在KTJBK.DBF中查询用户名称(字段名)为“涪陵师范高等专科学校”,或为“涪陵师专”,或为“涪师专”的全部记录,可以先将满足条件的记录拷贝到一临时数据库TEMP.DBF中,然后再浏览,浏览完毕删除临时数据库TEMP.DBF。其程序如下:
m.field="涪师专"
SELECT 0
USE KTJBK
COPY TO TEMP.DBF FOR ZFBJ(用户名称,m.field)
SELECT 0
USE TEMP
BROWSE NOEDIT
USE
DELETE FILE
TEMP.DBF
SELECT KTJBK
USE
通过上面介绍的自定义函数实现了真正的模糊查询,然而令人遗憾的是它的速度表现总使人感到美中不足。幸好在FoxPro中引入了结构化查询语言SELECT-SQL。
三、 利用FoxPro中SELECT-SQL语句的模糊查询方法
结构化查询语言SQL是FoxPro中值得骄傲的特色之一。利用SQL的SELECT语句
可以非常方便、极其快速地进行十分复杂的查询操作。特别值得推荐的是ELECT-SQL语句中的WHERE参数支持通配符“%(百分符号)”和“_(下划线符号)”,因此,对于查询条件为缩略语或简称的情况,可以非常简单地实现真正的模糊查询。这里,百分符号“%”代表0个或0个以上的任意字符,下划线符号“_”代表1个任意字符,它们只能与运算符LIKE搭配使用。
使用举例:设内存变量m.field,其值为用户输入的用户名称的简称,如“涪师专”,现在要在KTJBK.DBF中查询用户名称(字段名)为“涪陵师范高等专科学校”,或为“涪陵师专”,或为“涪师专”的全部记录,可以用下面的一段程序实现:
m. field="涪师专"
mc_cxtj="%"
FOR i=1 TO LEN(ALLTRIM(m.field)) STEP 2
mc_cxtj=mc_cxtj+SUBSTR(ALLTRIM(m.field),i,2)+"%"
ENDFOR
SELECT * ;
FROM KTJBK ;
WHERE KTJBK.用户名称 LIKE (mc_cxtj) ;
INTO CURSOR TEMP
程序说明:本程序运行时,先将m.field = "涪师专" 中插入四个通配符“%”,得到mc_cxtj ="%涪%师%专%",然后利用SQL的SELECT语句,从数据库KTJBK.DBF中选出字段变量“用户名称”符合“%涪%师%专%”格式的所有记录,输出到一个虚拟临时数据库TEMP.DBF中。
利用FoxPro中的结构化查询语言SELECT-SQL可以编写出很漂亮的通用查询程序。笔者在数据库管理系统的开发实践中,曾用FoxPro的屏幕生成器编写过一通用查询程序,其通用性和执行速度表现都非常好(本人愿抛砖引玉,奉献给有兴趣的《软件世界》读者,见附录),限于篇幅这里就不详细介绍了。
附录:《一个真正的通用查询程序》见磁盘文件TYCX.TXT(纯文本文件)或
TYCX.DOC(WORD97文档)
引言
查询优化是数据库管理系统设计和实现所采用的一项重要技术,也是影响数据库性能的关键因素。为了优化数据库的性能,除了在数据库的物理设计,关系规范化等方面进行改进外,还有一个简单有效的方法就是通过设计高效合理的查询计划提高查询响应速度。
数据库管理系统处理查询计划的方式是:在做完查询语句的词法、语法检查之后,将语句提交给数据库管理系统的查询优化器进行代数优化和存取路径的优化,之后由预编译模块处理语句并生成查询规划,然后在合适的时间交由系统处理执行,最后将执行结果返回给用户。SQL语句是对数据库进行操作的唯一途径,应用程序的执行最终要归结为SQL语句的执行,SQL语句的效率对数据库系统的性能起到了决定性作用。因此对查询语句的优化是提高查询效率的根本。
一、SQL查询语句的优化策略
影响数据库系统性能的因素很多,包括数据库连接方式、应用系统架构、数据库设计、管理等。其中最本质又至关重要的是数据库管理系统本身的查询优化技术。通过分析关系代数表达式的等价变换准则及查询代价,给定的SQL查询与关系代数表达式对应关系,研究出基于关系代数等价变换规则的SQL查询优化。此外,优化器的优化策略还与所查询表的内容和其他一些与服务器有关的因素有关。因此对优化器来讲,最为重要的选择就是使用什么索引和采用何种表的连接手段。如果用户提交的SQL语句和系统的索引体系是一个不合理的查询计划,仅仅经过系统优化器的优化,根本不可能变得高效。因此用户应合理适当的建立索引体系。
二、SQL查询的优化方法
设计高性能的SQL语句的前提是:熟悉你所用的优化器的优化策略并深入理解数据库中的数据,以及透彻的分析用户的需求。在此基础上,才能尝试编写效率最高的SQL语句,优化程序设计。以下所举实例中使用的数据表来自工作实际中的学生信息表(students )、教师信息表(teachers)以及学生成绩表(sc)。
1.合理使用常规优化查询
观察下面两组查询语句,它们查询的结果都是一样,但是查询的速度却有着明显的区别。
第1组:SELECT*FROM teachers WHERE salary/25 =1000
第2组:SELECT*FROM teachers WHERE salary =1000 * 25
第2组的语句,在经过了优化后,查询的速度减少了数十倍。因为,数据库优化器在面对第2组的salary=1000* 25时,会转换成salary=25000进行查询,却不能将第1组中的salary/25=1000进行转换。鉴于此,应尽量写用常量跟字段比较检索的表达式,而不要将字段置于表达式当中,否则就没有办法进行优化。
2.拆分子句优化查询
使用了IN,OR子句的查询语句,常会使工作表中索引失效。在不会产生大量重复值的前提下,可以考虑把子句拆分开,要求拆分的子句中应该包含索引。在WHERE子句中的“IN”在逻辑上相当于“OR”,所以数据库优化器会将sno in ('01', '02')转化为sno='0l' or sno='02'来执行。这里采用了“OR策略”,就是将满足每个OR子句的行取出,存入临时数据库的工作表中,再建立唯一索引去掉重复行,最后从这个临时表中计算结果。因此,实际过程中并没有利用sno的索引,这样还会因tempdb数据库性能的不同而影响查询时间。
假设在一个表table中有二十万行,其中no字段上有非群集索引,则执行下面这条语句的速度将会非常慢:
SELECT*FROM table WHERE no IN ('0',' 1')
当这个表中的行越来越多,速度也将越来越慢。如果我们将这个OR子句分开,变成:
SELECT*FROM table WHERE no='0'
SELECT*FROM table WHERE no='1'
然后将得到的结果进行UINIO运算,执行的时间只需短短数秒,因为这里的每句都使用了索引,由此提高了查询速度。
3.使用存储过程优化查询
存储过程是用SQL语句和数据库编程语言编写的,完成一定的数据访问功能或提供一定的服务过程,预先进行编译和优化后,存储在服务器中,客户程序可以通过远程调用的模式调用它们,因此在执行时不需要将应用程序代码向服务器端传送,可以大大减轻网络负载。同时,由于存储过程已编译为可执行代码,不需要每次执行时进行分析和优化工作,从而减少了预处理的时间,提高了效率。另一方面,使用存储过程还易于维护,且表的结构改变时,不影响客户端的应用程序。
4.通过查询语句优化提高查询速度
⑴避免使用不兼容的数据类型
查询的问题之一是在where子句中对有不同类型的列的比较企图。例如float和int;char和varchar;binary和varbinary是不兼容的。因此要求where子句中表达式的数据类型是兼容的,数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。
⑵避免或简化排序
应当简化或避免对海量数据表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素,索引中不包括一个或几个待排序的列;group by或order by子句中列的次序与索引的次序不一样;排序的列来自不同的表。为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。
⑶避免相关子查询
若子查询中引用外层查询的值,就构成相关子查询。执行时就不能象无关子查询那样,先单独处理子查询,再处理外层查询,而需要外层查询和子查询交叉进行。先用外层查询定位一行数据,这样子查询的引用就有了确定值,然后执行子查询,得到结果后判定外层查询定位的那行数据是否满足条件,再取下一条记录,再执行子查询……直到外层查询涉及的数据全部检查完为止。例如一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。这样的查询嵌套层次越多,效率越低,因此应当尽量避免子查询。
三、结论
以上所述只是对SQL查询进行优化的方法,查询优化的重点环节是使得数据库服务器少从磁盘中读数据,同时尽量避免非顺序读页。要想实现SQL的性能优化,还需要深人研究数据库层的资源配置、网络层的流量控制以及操作系统层的总体设计等。为了能更好地实现数据库应用系统优化,平时需要多积累一些SQL语句的优化技巧,充分利用硬件性能和软件方法来解决。
参考文献
[1] 刘亚欣.数据库查询优化技术研究及其应用[D].大连理工大学,2006,(12)
[2] 郭玉栋、左金平.SQL 语言查询优化方案探究[J].晋中学院学报,2006,(6)