Oracle SQL - 避免全表扫描(在哪里)

时间:2016-07-06 06:20:03

标签: sql oracle view

我有一个声明(简单地说我们可以这样看:)

Select * from VIEW where View.target='alpha'

视图使用多个表 - 例如表X,Y,Z,目标将在X中。视图返回20亿行的数据集,使用此查询,数据库将加载所有这些表并搜索目标等于'alpha'。现在是否有可能更快地进行此查询?

也许有可能使我加载的视图更小(?)我认为当我可以在视图中制作'target ='alpha'语句并且视图会更小时这会真的帮助...但我认为当我在视图中执行此语句时问题将是相同的,因为那时视图会做同样的事情(我是对的吗?)

最后,当我可以拥有视图并在新语句中完成工作时会更好,但如果有人在我更改视图时会有一个想法,那么也可以这样做。

谢谢!

1 个答案:

答案 0 :(得分:2)

视图是存储的SQL语句,为了使视图更快,您必须使存储的SQL语句更快。

SQL语句依赖于表并加快对使用索引的表的查询速度。索引的好处很多,请阅读SO问题的这个很好的答案here。它解释了什么是索引,它是如何工作的以及为什么需要它。

因此,为了防止全表扫描,您需要添加索引以加快查询速度。在您的情况下,您需要确定SQL语句中适合索引的列。通常,WHERE,ORDER BY,JOIN和GROUP BY子句中常用的列非常适合包含在索引中。 在您的情况下,开始查看目标列所在的表。首先在那里添加一个索引,然后继续与查询中的其他表的关系。这将最终使您在使用视图时获得更快的响应时间。

在Oracle表上创建索引。阅读Oracle文档here