查询视图花费了太多时间

时间:2013-05-10 06:01:47

标签: sql view

我们有一个视图表,从视图中选择通常需要花费太多时间。 例如:select x,y,z from view1需要花费太多时间来加载。这个还可以。

如果您在几秒钟内查询:select x,y,z from view1 where x in ('abc')次查询。

如果您在几秒钟内查询:select x,y,z from view1 where x in (select 'abc' from table1 where y='1234')次查询。

但如果你查询: select x,y,z from view1 where x in (select x from table1 where y='1234')花费了太多时间来查询,这是我们想要解决的问题。

顺便说一句,您可以这样认为:select x from table1 where y='1234' 单行返回'abc'

情景如上所述, 您认为可能是花费这么多时间查询第三个查询的原因。 我们已经尝试加入,但它没有用。

1 个答案:

答案 0 :(得分:2)

  • 视图不是一段节省时间的魔法代码
  • 视图是一个展开的宏:不多也不少

因此,如果您的视图有5个表和4个JOIN,则每次

所以,我的问题应该是:

  

在视图中生成列x的某个基表中的基础列上是否有合适的索引?

对于最后一个SQL,您要在视图内容中添加一个额外的IN子句和子查询 请注意,您可能只知道返回了一行,但优化器可能不会因为或差或过时的统计信息和/或错误的索引而

我的下一个问题

  

table1是否有良好的索引来有效地满足子查询?

无论哪种方式,查看查询计划都可以帮助您确定出现了什么问题