Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90966863
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-04-08 16:13:32

作者:武德亮   
在数据库应用过程中,数据查询是最普遍的操作,也是最耗时的操作。查询的优劣在很大程度上反映一个数据库性能的优劣。INFORMIX-ONLINE是INFORMIX支持联机事物处理的第二代数据库的核心。ONLINE使用查询优化器(Query Optimizer)决定如何执行一个查询。下面根据INFORMIX-ONLINE的特点提出一些优化查询的建议和方法。
一、及时更新系统统计信息
     查询优化器的工作是找出查询指定数据的最快捷和费用最低的方法。在对数据(尤其是在几个表中共享某种关系的数据)做出要求时,有许多不同的方法可以用于检索、排序和合并结果。每种方法要求所需的资源量和完成处理所需的时间有所不同。查询优化器根据操作所需满足的约束和适当的统计信息对每种方法作出评测,并从中选出最有效的方法。
ONLINE将数据库、表和索引等统计信息存储在系统目录中,查询优化器使用这些统计信息构造查询方法。统计信息的准确性将影响查询计划的质量,但是表的信息并不随着表的修改而更新,必须使用UPDATE STATISTICS语句更新统计信息。否则,查询优化器将不能准确地选择出优化的查询途径。
     ONLINE管理员或数据库管理员(DBA)应定期执行UPDATE STATISTICS语句以更新统计信息、提高查询效率。
二、改变查询优化器
     如果查询速度特别慢,可用下面方法进行诊断:在SELECT语句之前,执行SET EXPLAN ON语句来显示查询计划(sqexplan.out文件中)。对查询计划进行分析,如果发现优化器没有选择最有效途径,采取下面的措施改变查询优化器。
1. 增加或删除索引
查询优化器根据查询条件决定是否使用索引,索引对查询速度的影响是巨大的,索引可以加快查询速度,也可以大大减慢查询速度。
2. 在查询列上建立数据分布信息
使用UPDATE STATISTICS语句的MEDIUM或HIGH关键字规定更新某个列上的数据分布,这些数据分布的统计信息存储在系统目录表(sysdistib表)中。
3. 通过配置OPTCOMPIND参数改善查询方案
OPTCOMPIND参数在查询优化中起关键作用,因为它能使查询优化器使用不同的方法将两个表的数据连接起来。当OPTCOMPIND设置为0时,在一个连接中只考虑索引途径,使用嵌套-循环的连接方法。当设置为1时,如果有可用的索引,就先用嵌套-循环的连接。如果没法用嵌套-循环连接,就采取费用最低的一种方法。当设置为2时,查询优化器根据查询的代价选择一种连接方法,而不考虑对表所上的锁。
4. 使用SET OPTIMIZATION LOW语句减少优化时间
所有可能的查询途径都必须进行检查,以便加以优化筛选。将优化级别降低可以减少一些优化查询的工作,对比两种查询速度可以确定优化级别是否有益。
5. 使用PDQ技术
PDQ(Paralled Data Query)是Online Dynamic Server的一项功能,它可以同时执行不同的返回查询值的任务,从而最大限度地利用系统资源。PDQ包括五种并行的部分:并行扫描、并行连接、并行聚集和并行分组。与PDQ相关的参数有:PDQPRIORITY、DS-TOTAL-MEMORY、DS-MAX-QUERIES、MAX-PDQPRIORITY、DS-MAX-SCANS。通过设置这些参数,实现并行处理。
6. 对SQL语句进行评价
  评价SQL语句,尽量减少子查询,改用连接查询以缩短查询时间。
三、优化查询方法
根据应用的目的不同,查询归结为联机事物查询和决策支持查询。OLTP(联机事物)查询通常只检查一小部分数据,而DSS(决策支持系统)查询要检查大量的数据并进行复杂的处理。下面针对这两种查询给出不同的提高性能的方法。
1.在OLTP查询中提高查询性能的方法
(1)避免对ORDER BY后的列进行排序。在ORDER BY后的列上建立一个索引,让查询优化器使用该索引(避免重新排序)以节约时间。
(2)建立索引,避免顺序扫描。由于OLTP查询需要检索的行数量较少,顺序扫描是不合算的,最好在检索列上建立一个索引。
(3)避免合并连接,减小系统开销。在连接列上建立一个索引以避免合并连接。
(4)通过索引、数据分布和SET OPTIMIZATION改变查询途径。
2. 在DSS查询中提高查询性能的方法
(1)删除索引,缩短扫描时间。由于扫描一个大表的大部分数据时,不读索引而直接扫描整个表反而更快,因此可删除索引,使查询优化器直接扫描从而提高效率。
(2)利用并行数据查询PDQ。通过配置ONLINE参数(PDQPRIORITY)启动PDQ。
(3)将OPTCOMPIND设置为2。该选项可使查询优化器从索引连接、杂凑连接和排序合并连接中选择出一种代价最小的途径。
(4)利用表分割,实行对大表的并行扫描。将DSS查询的表按照一定分布方案分段存储到不同的dbspace 中。这样ONLINE 在查询时,将进行并行扫描。
  以上是提高INFORMIX-ONLINE查询性能的一些方法。由于查询是多种多样的,影响查询的因素也是复杂多变的,因而优化查询的方法应根据不同的环境、不同的条件具体分析,以便进一步提高数据库利用效率。
阅读(1083) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~