一个实例讲解MySQL查询优化(一)


数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业、政府等部门最为重要的计算机应用之一。从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。

举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时。如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见查询优化技术的重要性。

  笔者在应用项目的实施中发现,许多程序员在利用一些前端数据库开发工具(如PowerBuilder、Delphi等)开发数据库应用程序时,只注重用户界面的华丽,并不重视查询语句的效率问题,导致所开发出来的应用系统效率低下,资源浪费严重。因此,如何设计高效合理的查询语句就显得非常重要。本文以应用实例为基础,结合数据库理论,介绍查询优化技术在现实系统中的运用。

  分析问题

  许多程序员认为查询优化是DBMS(数据库管理系统)的任务,与程序员所编写的SQL语句关系不大,这是错误的。一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的SQL语句的集合,查询规划是经过优化处理之后所产生的语句集合。DBMS处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给DBMS的查询优化器,优化器做完代数优化和存取路径的优化之后,由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。在实际的数据库产品(如Oracle、Sybase等)的高版本中都是采用基于代价的优化方法,这种优化能根据从系统字典表所得到的信息来估计不同的查询规划的代价,然后选择一个较优的规划。虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的SQL语句是系统优化的基础,很难设想一个原本糟糕的查询计划经过系统的优化之后会变得高效,因此用户所写语句的优劣至关重要。系统所做查询优化我们暂不讨论,下面重点说明改善用户查询计划的解决方案。

 

数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业、政府等部门最为重要的计算机应用之一。从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时。如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见查询优化技术的重要性。

  笔者在应用项目的实施中发现,许多程序员在利用一些前端数据库开发工具(如PowerBuilder、Delphi等)开发数据库应用程序时,只注重用户界面的华丽,并不重视查询语句的效率问题,导致所开发出来的应用系统效率低下,资源浪费严重。因此,如何设计高效合理的查询语句就显得非常重要。本文以应用实例为基础,结合数据库理论,介绍查询优化技术在现实系统中的运用。

  分析问题

  许多程序员认为查询优化是DBMS(数据库管理系统)的任务,与程序员所编写的SQL语句关系不大,这是错误的。一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的SQL语句的集合,查询规划是经过优化处理之后所产生的语句集合。DBMS处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给DBMS的查询优化器,优化器做完代数优化和存取路径的优化之后,由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。在实际的数据库产品(如Oracle、Sybase等)的高版本中都是采用基于代价的优化方法,这种优化能根据从系统字典表所得到的信息来估计不同的查询规划的代价,然后选择一个较优的规划。虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的SQL语句是系统优化的基础,很难设想一个原本糟糕的查询计划经过系统的优化之后会变得高效,因此用户所写语句的优劣至关重要。系统所做查询优化我们暂不讨论,下面重点说明改善用户查询计划的解决方案。

 

本文作者:



相关阅读:
JavaScript与C# Windows应用程序交互方法
CSS Sprites技术以及图片优化
APACHE禁止图片盗链
colinux-0.7.2中安装debian-4.0r3
Oracle数据库效率技巧:避免错误的索引
php设计模式 Bridge (桥接模式)
iis 服务器应用程序不可用的解决方法
创建本地的PEAR
使用AJAX异步获取数据
支持php4、php5的mysql数据库操作类
调整FreeBSD的虚拟内存系统
函数式JavaScript编程指南
file_get_contents函数不能使用的解决方法
PHP, JScript 和 VBScript 函数和类的语法
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 不来往,不回忆,各自安好,各自天涯 结婚的贺词 金工实习报告--材料学院高分子材料乙班 罗文彬 论秘书应具备的素质 人教版八年级下月考——掌起初中2007——2008学年第二学期八年级(下)语文第一次月度练习卷(会员上传) 中考满分作文700字_我最想依靠的就是你(母亲) 小学六年级作文600字:生活的变化 黄嘉翔 你仅仅是想把我留在那记忆中 国庆节学生发言稿 忘记你 对不起 我做不到 碧水柔情日志:(原创) 从“记得妈妈的生日”说开去…… 高中数学课堂总结的心得体会 感谢这一切! 关于哲理的QQ说说 四年级编写童话故事的作文:客厅 游江滨,观夜景 快,出来闯闯吧 我爱的人,你们好吗? 关于难忘的一节课 亲爱的°这一生只想牵你的手走 包容就在我身边 2012福建高考各批次切线揭晓:一本文科557分 理546分 大黄和他的小木屋 七夕情人节祝福语:七夕情人节增进爱情祝福语 续写《孔乙己 离开了,就别再频频回头 生命中的那根刺作文800字 模型制作大赛获奖感言 城市快速发展地域城乡用地结构和布局分析 自信乐观,是我们90后的表情 【精品】1到5的认识教学反思 qq爱情句子带图片 读《格兰特船长的儿女有感600字 我敬佩的一个人--我的姑姑 小学六年级作文550字:偶的篮球表妹 职场中的“心理奴隶” 我是个小富翁作文800字 2016教师读书演讲稿 如果是一棵树多好 快乐的下雪天 秋声雅韵十赋《鹧鸪天》 一对男女最后的对白,看了就知道! 学院红十字会工作思路 个人半年 工作总结范文 我们爱学习作文 文具盒里的故事150字 彩虹蛋糕 阅读150字 爱情散文:我的吻,能否遗留在你的唇边 一颗感恩的心作文600字

Copyright © 2016 phpStudy |