表与视图- Oracle

svujldwt  于 2023-04-20  发布在  Oracle
关注(0)|答案(3)|浏览(152)

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

4sup72z8

4sup72z81#

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

  • 首先,对通常搜索的字段建立索引。
  • 不要使用where x in(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

k10s72fa

k10s72fa2#

视图不会比底层查询慢(或快)。
如果你的观点是

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

然后

select * from v;

时间+/-与

select * from t
  where rownum < 500000;

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

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

fzwojiic

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;

然后从视图中选择,你仍然会遇到同样的问题。
您需要查看物理模型,以及存储和/或索引数据的最有效方式,以优化用于检索数据的访问路径。

相关问题