2016-07-06 48 views
0

我有一个声明(简单,我们可以看到这样的:)的Oracle SQL - 避免全表扫描(如果)

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

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

也许有可能使视图从中加载一点点(?)我认为当我可以在视图中使'target ='alpha'语句变小时,视图会变小真正帮助......但我想,当我在视图中做此声明的问题是相同的,因为这样的观点会做同样的(我说得对不对?)

在结束这将是更好的时候才能有现实的观点并且在新的陈述中做这项工作,但是如果有人在改变视图的时候会有一个想法,那么这也可以完成。

谢谢!

+0

查询执行的优化是为什么数据库管理员存在的理由之一。你的问题太笼统了。如果不知道所有表的背后,它们的统计数据,索引和索引统计信息,针对它们发出的查询的类型,它们如何填充,更改或分区等,则无法进行优化。询问你的DBA。他有知识去做。如果您想了解如何做到这一点,你就可以开始在这里https://docs.oracle.com/cd/E11882_01/server.112/e41573/perf_overview.htm#PFGRF94083 – Mottor

+0

http://tkyte.blogspot.de/ 2005/06/how-to-ask-questions.html –

回答

2

视图是存储在SQL语句,并作出更快的观点,你将不得不作出存储的SQL语句更快。

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

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

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

+0

我可以在View上使用索引吗? 该视图使用多个表来创建,(例如表x,y,z)目标将在x中,当我使用表x目标上的索引时它会有帮助吗?或者这会有没有影响? 预先感谢您! –

+0

视图是存储的SQL语句,您不能在其上创建索引。 创建视图的基础表上的索引来提高的观点 –

+0

性能如果你加入的观点很多表,看表之间的连接列和创建索引,其中包括对每个表中的列。那么这个视图的表现会更快,因为连接将使用索引。 –