Oracle数据库中大型表查询优化研究
2007-05-11 12:22:00 来源:WEB开发网作为一个通用的优化原则,我们在解决该问题时,适当增大了SGA的容量,从而保证Oracle实例可以比较高效的运行。设置缓冲区高速缓存的容量为32 M,设置共享池的大小为56 M。运行rpt_lib.sql程序检查库高速缓存不足率(还没有运行该脚本),表明库缓存足够。
2.2 对象调整
这一步骤我们要对每一个Oracle对象进行调整从 而优化性能,包括对所有的存储参数进行正确的设置,尤其是对影响输入输出的参数进行设置。Pctfree,pctused,freelist参数的设置都会对SQL性能产生重要影响。
在解决该问题时,我们没有对对象的存储参数进行调整。对象的存储参数的调整要建立在具体对象的基础之上,我们使用的测试大表除了在容量上模拟可能的实际对象之外,和实际对象并没有多少可比之处。举例来说,pctfree参数是指在实际的存储块中,留出来为块中的记录扩展所用的空闲空间占该存储块容量的百分比,这个参数和实际表记录的长度及可扩展性有关,要在设计出实际表之后进行调整。因此我们对对象的存储参数使用了数据库的缺省设置。数据库的对象还包括索引、过程、包等,对对象的调整要包括对他们的调整,这里一并略去。
2.3 SQL语句调整
SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现,但是语句的执行效率是很不相同,一般考虑如下规则:
(1)添加索引
在对大表进行扫描时,首先要避免不必要的全表扫描。最通常的做法就是给大表添加索引。所谓全表扫描,就是在访问表时,从磁盘上存储该表的起始位置开始逐记录读数据,直到该表的结束位置。给大表添加索引后,我们可以通过访问索引的方式获得记录的物理位置,从而达到访问表的目的。设想一下,对于一个拥有大量字段的表,如果只需要返回其中少量字段,那么在这些字段上建立索引,通过索引访问获得记录,将大大降低物理磁盘读写次数,从而降低了整个查询响应时间(事实上,这种情况下根本没有必要访问数据表,只是访问索引就足够了)。在我们的测试用表中,只有4个字段,显然无法发挥索引的这一优势。我们的测试用表的特点是记录条数多,达到50万条,但每次返回的记录数只有几十条,在这种情况下,使用索引同样可以起到好的效果。首先在检索条件上建立索引,在表访问时,我们通过索引来获取目的记录集的物理地址,因为返回的记录数不多,所以这种方式造成的物理读写很少,应该可以获得较满意的访问时间。在测试中,我们对测试用表的条件字段添加索引,但事实上并没有提高查询的响应时间,这是因为在SQL语句的执行计划中,在添加索引之前和之后,Oracle生成的执行计划中,表访问方式都是全表扫描,根本没有使用我们添加的索引。那么此时我们可以采用添加提示的方法。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
赞助商链接