ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle全表扫描性能优化之我见---应对海量数据库

Oracle全表扫描性能优化之我见---应对海量数据库

原创 Linux操作系统 作者:nbgyf 时间:2008-08-26 16:42:20 0 删除 编辑

Select * From myTable

大家看到这个语句感觉怎么样?

假如这个表很大而且必须要返回表里的所有数据,这时候我们再看这个语句是不是有点怕?

而这样的SQL语句在我们开发系统的时候经常碰到,特别是B/S架构的系统,一下子返回一万条数据确实有点恐怖。但是没有办法,既然业务需要我们必须排除万难,迎头赶上。

下面我们就来探讨一下Oracle的解决之道。

最常用的解决方法:分页查询。每次取出一部分数据,这样有利于利用索引,避免全表扫描,假如使用SELECT /*+ FIRST_ROWS */ * FROM  myTable效果更好。

假如一次查询某表的大部分数据,使用全表扫描更优于索引扫描,此时我们这些数据库工作者应该起点作用了。

1、表的碎片整理。在表数据的频繁修改之后,行链接和行迁移是很难避免的,表的碎片整理有利于全表扫描的时候,Oracle扫描最少的数据块。

2、将表改为分区表。按照业务逻辑将表数据分区存储。

3、仍然是设计问题。将表空间和索引空间分离,尽量减少扫描Oracle读取指针的扫描范围。

4、使用物化视图。在Oracle的内存中检索数据,已达到数据的查询最快化。

5、在需要Full Table Scan的时候避免Fast Full Index Scan。

6、对于大表增加data buffer,对于小表使用keep buffer。

7、减少pctused值,用空间换速度。(哈哈,有钱才行,没钱的量力而为)

8、将大表建立在哈希簇中。

9、将表改为索引组织表。

10、使用并行查询。

11、使用压缩数据表。

12、应用数据库六范式,最大化的消除数据冗余。

13、将select * 中的 *  改为字段名以避免查询语句再到数据字典中查询列名。

可惜Oracle不提供类似SQL Server的临时表用来提升查询性能。

近期失业在家,一次面试问到这个问题,当时没答上,回家后花了一个晚上总结了一下,现在特共享以求探讨,看看大家还有什么其它的方法。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16573/viewspace-434610/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-24

  • 博文量
    28
  • 访问量
    50123