1

我们有一个视图表,从视图中选择通常会花费太多时间。例如: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'一行。

上面描述了该场景,您认为可能是什么原因导致需要花费这么多时间来查询第三个查询。我们已经尝试加入,但没有成功。

4

1 回答 1

3
  • 视图不是一些节省时间的神奇代码
  • 视图是扩展的宏:不多也不少

因此,如果您的视图有 5 个表和 4 个 JOIN,则每次都会对它们进行评估。

所以,我的问题应该是:

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

至于您的最后一条 SQL,您正在向视图内容添加一个额外的 IN 子句和子查询。
请注意,您可能知道只返回一行,但优化器可能不会因为统计数据不佳或过时,和/或索引错误

我的下一个问题

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

无论哪种方式,查看查询计划将帮助您确定问题所在

于 2013-05-10T08:01:14.777 回答