|  首页  |  资讯  |  评测  |  活动  |  学院  |  访谈  |  专题  |  杂志  |  产服  |  
您现在的位置:硅谷网> 学院> 论文>

基于查询语句之外的数据库优化技术研究

2012-08-17 11:21 作者:张宝政 来源:硅谷网 HV: 编辑: 【搜索试试
  硅谷网8月17日消息 《硅谷》杂志2012年第13期刊文称,主要介绍数据库开发项目中实际用到的几种数据库优化方式,指明操作方法和注意事项,并简单举例说明,尽管不是常规的优化策略但具有可行性和可操作性。
  数据库系统是管理信息系统的核心,一个优秀的开发人员在开发数据库应用时,必然会采用各种途径优化查询语句,提高查询速度和效率,尤其在大型的或是复杂的数据库环境中。工作表结构的合理性,索引设计,连接设计,查询语句的运用等等,尽管得到相同的结果,但查询的效率,对数据库服务器的压力,资源的占用等方面却会大不相同。本文主要探讨在具体项目开发中,在传统的优化基础上,如何通过其他容易被忽视的途径最大程度的提高数据库查询速度,尽量减少数据操作,减轻数据库服务器的压力。
  1文件缓存的运用
  1.1将查询结果写入文件缓存。
  该处的文件缓存指的是写入到服务器磁盘上的包存有查询结果或对查询结果处理后的一个文件,在需要该结果时,页面中调入该文件即可,如php页面中,可通过include载入。
  适用环境:在项目开发中,查询结果相对固定并且不经常更新的工作表,而在项目中又频繁用到对该工作表的查询,可以把查询的结果写到一个文件缓存中,当用到该查询的时候,可直接载入该缓存文件而不需再去查询数据表以减少对数据库的操作。
  例如,开发学校自动化办公平台(oa)时,我们频繁用到选择发送对象的对话框,该对话框中,我们要查询每个部门的用户,递归调用得到树形的部门结构,这样一个简单的页面,如果一个单位有20个部门,我们将至少进行20次以上的数据查询,这种查询有两个特点,一是调用非常频繁,可以说只要有发送对象的操作中,都要用到,第二,结果相对固定,一个单位的部门很少改变,人员变动也不频繁。对此,我们可以将该查询的结果写到一个文件中,以后用到的时候只需引入该文件即可。这样可大大减少对数据库的操作次数。当查询结果发生变化时,如人员和部门发生变动,可更新一下缓存文件即可。
  注意事项:在数据表发生变化时必须及时更新改缓存文件,可以创建更新缓存文件的函数,在记录的插入、删除、修改等操作中同时触发该函数。
  1.2将查询结果写入数组或常量
  对数据量比较小但又频繁用到的工作表的查询,如果该查询结果相对固定,我们可以将查询结果写入一个数组或常量中,一般将这些数组或常量放于配置文件中,作为全局常量,当需要时直接调用该常量即可。
  例如在oa开发中,一个单位的用户总数是相对固定的,而在项目中频繁用到,每次调用我们可以通过查询语句“selecttotal”得到结果,当然,我们也可以将该结果存入一个常量中,将该常量放于配置文件,需要时直接调用该常量即可。再如:可以将部门信息表中部门id,部门名称写入一个数组中,该数组存储了部门id,部门名称的对应关系,这样本来需要联合查询才能得到部门名称的操作,可直接通过该数组获取。
  注意事项:1)数据表发生变化时要及时更新该数组或常量。2)如果存入数组常量中,则数组不应太大。
  2通过数据表优化
  2.1将多表联合查询整合为单表简单查询
  对在一定时期内数据不变、较为复杂的多表查询,可另外创建一个数据表(非临时表),将查询的结果进行整合写到一个该数据表中,并对关键字段进行索引,当需要查询的时候,只对该表进行简单查询,可大大提高查询的速度,减少对服务器的压力。
  如:在开发学生网上评教系统时,对每学期的评教结果的查询,我们一般的做法是,对学生打分表、教师信息表、课程信息表等多个数据表进行联合查询,然后对查询的结果进行分类汇总,求平均并进行复杂排序等数据库操作,最后输出查询结果,从查询语句本身,不管怎么优化,因为涉及多表联合、排序、统计等复杂操作,必然会影响查询效率。
  由于学生评教是限制在一个时间段内,在评教未完成之前,是不允许教师查询评教结果,评教完成之后,则结果也就固定,包括分值、名次等。为此,我们可以在评教完成后,在服务器端对学生评教情况进行汇总,对汇总的结果写入一个结果数据表,该表中包含联合查询后的所有结果字段并创建索引,脱离了与结果成绩相关的其它数据表,当需要查询评教结果时,只需对该表进行检索即可,大大提高了查询速度,减轻了对数据库服务器的压力。
  2.2冗余字段的创建
  在创建数据表字段时我们都要遵循数据库设计范式,尽量不出现冗余字段,表与表之间的联系,通过关联字段进行连接做联合查询获取。
  例如:开发短信息平台时,有用户表河段信息表两个表,按照数据库设计范式,这两个表通过用户名进行关联,如果要显示发送人的姓名,则需要对短信息表、用户表进行联合查询,以获取对应用户名的姓名。
  如果用户的姓名是固定的,如一个部门中,用户的姓名正确录入后是不会任意修改的,在这种情况下,我们可以在短信息表中增加一个冗余字段“用户姓名”来存储发送者的姓名,这样我们只需查询短信息表一个数据表便可以得到用户的姓名,这种举措尽管违背了数据库设计范式,但却大大提高查询的效率。
  注意事项:将字段冗余在一个数据表中,尽管提高了查询速度,但由于该字段脱离了所属数据表的联系,所以原数据表的更新不会自动影响到冗余字段的值,破坏了数据的一致性,因此,必须监控原数据表的变化,以及时更新到该冗余字段中。
  2.3采用分表存储技术
  所谓分表存储,是指将一个表分成两个或多个相同结构的工作表按照一定的规律对原表的数据分割存储,以减少查询时操作的记录数而达到优化查询的目的。分表技术是近些年用得比较流行的数据库优化方案,该方法尤其适用于大数据量(百万级)的工作表。
  利用分表存储技术,必须找到合适的分表算法,如,按时间段进行分表,将往年的记录放到新的工作表中;按某字段值进行分表,将标记为存档的记录或标记为删除的记录分割到新的工作表中。
  注意事项:分表存储技术适用于大工作表,如mysql的myisam存储,百万级数据的工作表可以考虑进行分表存储,由于分表存储技术也会带来一些问题,如分页、统计等,项目中需根据具体情况进行取舍。
  2.4使用临时表加速查询
  临时表是指在数据库操作中根据需要临时创建的数据表,用来存储一些临时的或中间数据,目前主流数据库系统都有临时表的应用,尽管创建和使用方法有差异,但作用大同小异,对于大数据量操作,或复杂的多表查询时,可以将查询的结果或子集创建到临时表中,可以加速查询速度和效率。
  临时表一般在会话结束后自动删除,因此临时表不能永久存储结果,其可作为查询的中间或过渡过程,临时保存数据,以便为进一步的查询提供方便,若要将临时表中的结果永久保存,利用sql语句将结果写入原数据表即可。
  3结语
  在数据库操作中,尤其对大型数据库的操作,优化查询速度,提高查询效率一直是开发人员孜孜以求的事情,从数据库的设计到前台调用,我们除了遵循一般的优化原则外,还应根据实际需要,大胆尝试,采取合理方法,尽量减少数据库操作,减少查询次数,以提高查询速度,减少服务器压力。本文提出了人们容易忽视的几种优化方法,指明了操作方法和注意事项,有些方法尽管违背数据库的设计范式,但实践证明是有效的。(原文载于《硅谷》杂志2012年第13期,硅谷网及《硅谷》杂志版权所有,未经允许禁止转载)
  
【对“基于查询语句之外的数据库优化技术研究”发布评论】

版权及免责声明:
① 本网站部分投稿来源于“网友”,涉及投资、理财、消费等内容,请亲们反复甄别,切勿轻信。本网站部分由赞助商提供的内容属于【广告】性质,仅供阅读,不构成具体实施建议,请谨慎对待。据此操作,风险自担。
② 内容来源注明“硅谷网”及其相关称谓的文字、图片和音视频,版权均属本网站所有,任何媒体、网站或个人需经本网站许可方可复制或转载,并在使用时必须注明来源【硅谷网】或对应来源,违者本网站将依法追究责任。
③ 注明来源为各大报纸、杂志、网站及其他媒体的文章,文章原作者享有著作权,本网站转载其他媒体稿件是为传播更多的信息,并不代表赞同其观点和对其真实性负责,本网站不承担此类稿件侵权行为的连带责任。
④ 本网站不对非自身发布内容的真实性、合法性、准确性作担保。若硅谷网因为自身和转载内容,涉及到侵权、违法等问题,请有关单位或个人速与本网站取得联系(联系电话:01057255600),我们将第一时间核实处理。
广告
相关
头条
硅谷网解密:4G网络中的微波传输解决方案 硅谷网解密:4G网络中的微波传输解决方案
在2013年12月4日,工信部向中国移动、中国联通、中国电信颁发TD-LTE(4G)经营许可之后……
·硅谷网解密:4G网络中的微波传输解决方案
·创意产业的批量化规律 工业造型方法论之加减
·《硅谷》杂志:浅谈电信运营商开展IPTV业务
·《硅谷》杂志:新型桌面搜索关键技术的研究与
·硅谷杂志:基于时间技术的搜索引擎排名算法
图文
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
利用重力势能做功发电介绍和势能输出系统介绍
利用重力势能做功发电介绍和势能输出系统介
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
利用重力势能做功发电介绍和势能输出系统介绍
利用重力势能做功发电介绍和势能输出系统介
最新
·佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
·利用重力势能做功发电介绍和势能输出系统介绍
·李磊:新时代下电网调度自动化技术的发展分析
·提升企业竞争力以及企业人力资源管理优化思考
·《硅谷》杂志:采油分层测静压工艺技术浅究
热点
·判断连续时间系统的线性非时变性和因果性
·3DMAX+Vary室内漫游动画制作的技法浅析
·长期使人困惑的问题:TCP连接中断的实时检测
·佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
·关于汽轮机油系统失火原因分析及防范措施的一
旧闻
·硅谷杂志:无线通信技术在调度通信中的应用
·《科技与生活》杂志:钢铁厂厂址的选择
·硅谷杂志:化工生产过程中的DCS监控系统的应
·颜海宙:谈谈工业锅炉节能运行的优化措施
·硅谷杂志:视频会议系统建设应用分析
广告
硅谷影像
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
利用重力势能做功发电介绍和势能输出系统介绍
利用重力势能做功发电介绍和势能输出系统介绍
公关负责人离职背后:危机公关案例分析
公关负责人离职背后:危机公关案例分析
硅谷网解密:4G网络中的微波传输解决方案
硅谷网解密:4G网络中的微波传输解决方案
使用Autoit脚本在虚拟内存盘设置考试模拟系统
使用Autoit脚本在虚拟内存盘设置考试模拟系统
探秘开滦集团设备租赁管理系统的设计和实现
探秘开滦集团设备租赁管理系统的设计和实现
关于我们·About | 联系我们·contact | 加入我们·Join | 关注我们·Invest | Site Map | Tags | RSS Map
电脑版·PC版 移动版·MD版 网站热线:(+86)010-57255600
Copyright © 2007-2020 硅谷网. 版权所有. All Rights Reserved. <京ICP备12003855号-2>