我的一个Oracle表包含超过2亿条记录。查询该表有时需要长达30分钟。我正在尝试在该表上创建一个视图,以便将记录限制在大约50万条。这会减少查询时间吗?
4sup72z81#
这不是降低查询速度的方法,请遵循以下步骤:
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
k10s72fa2#
视图不会比底层查询慢(或快)。如果你的观点是
create view v as select * from t where rownum < 500000;
然后
select * from v;
时间+/-与
select * from t where rownum < 500000;
也许你想看看物化视图,根据查询的不同,它们可能会显著地加快查询的速度(以更多的磁盘使用为代价)。
编辑根据您的评论(*UI报告只需要为最近的数据(即最近一周或一个月)生成。因此我只需要最新的数据... *)我想 * 分区 * 您的表。我可以建议this link介绍分区表吗?特别是关于分区修剪的部分。
fzwojiic3#
这取决于。你需要了解你的数据,你最感兴趣的数据子集,并确定如何最好地实现物理模型。(堆表,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;
然后从视图中选择,你仍然会遇到同样的问题。您需要查看物理模型,以及存储和/或索引数据的最有效方式,以优化用于检索数据的访问路径。
3条答案
按热度按时间4sup72z81#
这不是降低查询速度的方法,请遵循以下步骤:
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
k10s72fa2#
视图不会比底层查询慢(或快)。
如果你的观点是
然后
时间+/-与
也许你想看看物化视图,根据查询的不同,它们可能会显著地加快查询的速度(以更多的磁盘使用为代价)。
编辑根据您的评论(*UI报告只需要为最近的数据(即最近一周或一个月)生成。因此我只需要最新的数据... *)我想 * 分区 * 您的表。我可以建议this link介绍分区表吗?特别是关于分区修剪的部分。
fzwojiic3#
这取决于。你需要了解你的数据,你最感兴趣的数据子集,并确定如何最好地实现物理模型。(堆表,IOT,位图索引,B* 树索引,单表哈希集群等)
如果您有一个查询,例如:
它返回了200,000,000行中的500,000行,但它需要运行很多分钟,因为col_a上没有索引,并且被迫进行全表扫描,然后创建一个视图:
然后从视图中选择,你仍然会遇到同样的问题。
您需要查看物理模型,以及存储和/或索引数据的最有效方式,以优化用于检索数据的访问路径。