我的一个Oracle表包含超过2亿条记录。查询表有时需要30分钟。我试图在表上创建一个视图,以限制约50万的记录。这会减少查询时间吗?
答案 0 :(得分:1)
这不是降低查询速度的方法,请遵循以下内容:
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的部分。