数据库查询优化:数据库的查询优化技术
疯狂代码 http://www.crazycoder.cn/ ĵ:http:/www.crazycoder.cn/DataBase/Article67667.html
数据库系统是管理信息系统核心基于数据库联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业
、政府等部门最为重要计算机应用的从大多数系统应用例子来看查询操作在各种数据库操作中所占据比重最大
而查询操作所基于SELECT语句在SQL语句中又是代价最大语句举例来说如果数据量积累到定程度比如个银行账
户数据库表信息积累到上百万甚至上千万条记录全表扫描次往往需要数十分钟甚至数小时如果采用比全表扫描
更好查询策略往往可以使查询时间降为几分钟由此可见查询优化技术重要性
笔者在应用项目实施中发现许多员在利用些前端数据库开发工具(如PowerBuilder、Delphi等)开发数据库应用
时只注重用户界面华丽并不重视查询语句效率问题导致所开发出来应用系统效率低下资源浪费严重因此如何设
计高效合理查询语句就显得非常重要本文以应用例子为基础结合数据库理论介绍查询优化技术在现实系统中运
用
分析问题
许多员认为查询优化是DBMS(数据库管理系统)任务和员所编写SQL语句关系不大这是个好查询计划往往可以
使性能提高数十倍查询计划是用户所提交SQL语句集合查询规划是经过优化处理的后所产生语句集合DBMS处
理查询计划过程是这样:在做完查询语句词法、语法检查的后将语句提交给DBMS查询优化器优化器做完代数优
化和存取路径优化的后由预编译模块对语句进行处理并生成查询规划然后在合适时间提交给系统处理执行最后
将执行结果返回给用户在实际数据库产品(如Oracle、Sybase等)高版本中都是采用基于代价优化思路方法这种
优化能根据从系统字典表所得到信息来估计区别查询规划代价然后选择个较优规划虽然现在数据库产品在查询
优化方面已经做得越来越好但由用户提交SQL语句是系统优化基础很难设想个原本糟糕查询计划经过系统优化
的后会变得高效因此用户所写语句优劣至关重要系统所做查询优化我们暂不讨论下面重点介绍说明改善用户查
询计划解决方案
解决问题
下面以关系数据库系统Informix为例介绍改善用户查询计划思路方法
1.合理使用索引
索引是数据库中重要数据结构它根本目就是为了提高查询效率现在大多数数据库产品都采用IBM最先提出
ISAM索引结构索引使用要恰到好处其使用原则如下:
●在经常进行连接但是没有指定为外键列上建立索引而不经常连接字段则由优化器自动生成索引
●在频繁进行排序或分组(即进行group by或order by操作)列上建立索引
●在条件表达式中经常用到区别值较多列上建立检索在区别值少列上不要建立索引比如在雇员表“性别”列上
只有“男”和“女”两个区别值因此就无必要建立索引如果建立索引不但不会提高查询效率反而会严重降低更
新速度
●如果待排序列有多个可以在这些列上建立复合索引(compound index)
●使用系统工具如Informix数据库有个tbcheck工具可以在可疑索引上进行检查在些数据库服务器上索引可能失
效或者频繁操作而使得读取效率降低如果个使用索引查询不明不白地慢下来可以试着用tbcheck工具检查索引
完整性必要时进行修复另外当数据库表更新大量数据后删除并重建索引可以提高查询速度
2.避免或简化排序
应当简化或避免对大型表进行重复排序当能够利用索引自动以适当次序产生输出时优化器就避免了排序步骤以
评论