我们有一个视图表,从视图中选择通常需要花费太多时间。
例如: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'
。
情景如上所述, 您认为可能是花费这么多时间查询第三个查询的原因。 我们已经尝试加入,但它没有用。
答案 0 :(得分:2)
因此,如果您的视图有5个表和4个JOIN,则每次 。
所以,我的问题应该是:
在视图中生成列x的某个基表中的基础列上是否有合适的索引?
对于最后一个SQL,您要在视图内容中添加一个额外的IN子句和子查询 请注意,您可能只知道返回了一行,但优化器可能不会因为或差或过时的统计信息和/或错误的索引而
我的下一个问题
table1是否有良好的索引来有效地满足子查询?
无论哪种方式,查看查询计划都可以帮助您确定出现了什么问题