表与视图 - Oracle

时间:2014-03-06 05:39:09

标签: sql oracle

我的一个Oracle表包含超过2亿条记录。查询表有时需要30分钟。我试图在表上创建一个视图,以限制约50万的记录。这会减少查询时间吗?

3 个答案:

答案 0 :(得分:1)

这不是降低查询速度的方法,请遵循以下内容:

  • 首先在通常搜索的字段上建立索引。
  • 不要在x中使用(select),而是使用PKs的内连接。
  • 不要使用函数从另一个表中获取值,而是使用join,(否则会打开另一个会话)
  • 尝试标准化并将BLOB,CLOB字段从表中分离到另一个表,如果它放在另一个表空间中则更好。
  • 为给定的架构提供更多内存。
  • 还使用以下内容:

Part 1讨论了全表扫描的使用 part 2讨论了如何以及何时使用索引。 Part 3告诉您如何优化联接。 Part 4讨论了如何使用视图来获得高性能数据库。 Part 5告诉您为什么不应该对数据库进行规范化。 在Part 6中,您可以学习如何使用存储过程来实现天平的Oracle性能。 最后,part 7向您展示了如何使用子查询来提高Oracle性能

http://www.smart-soft.co.uk/Oracle/oracle-performance-tuning-part1.htm

的引用

答案 1 :(得分:1)

这取决于。您需要了解您的数据,您最感兴趣的数据子集,并确定如何最好地实现物理模型。 (堆表,IOT,位图索引,B *树索引,单表散列簇等)

如果您有查询,例如:

select * from some_big_table where col_a = 32457;

然后它返回200,000,000行中的500,000行,但它需要几分钟才能运行,因为col_a上没有索引,并且被迫进行全表扫描,然后创建一个视图:

create view my_view as select * from some_big_table where col_a = 32457;

然后从视图中选择,你仍然会遇到同样的问题。

您需要查看物理模型,以及存储和/或索引数据的最有效方法,以优化用于检索数据的访问路径。

如果您提供问题的更多具体细节,我们可能会提供更具体的指导。

希望有所帮助。

答案 2 :(得分:1)

视图不会像下层查询那样慢(或更快)。

所以,如果您的观点是

create view v as
    select * from t
     where rownum < 500000;

然后

select * from v;

相同的时间
select * from t
  where rownum < 500000;

也许你想看看物化视图。根据查询,它们可能会显着加快查询速度(以更多磁盘使用量为代价)。

修改根据您的评论(只需要为最近的数据生成UI报告(即最近一周或一个月)。因此我只需要最新的数据... < / em>)我想要分区你的表。我可以建议this link介绍分区表吗?特别是关于partition pruning的部分。