接受以下查询:
select * from
(
select a, b
from c
UNION
select a, b
from d
)
where a = 'mung'
order by b
优化器是否会发现我正在对值“mung”过滤a,从而对子查询中的每个查询过滤mung。
或
它是否会运行子查询联合中的每个查询,并将结果返回到外部查询进行筛选(查询可能会建议这样做)
在这种情况下,以下查询将执行得更好:
select * from
(
select a, b
from c
where a = 'mung'
UNION
select a, b
from d
where a = 'mung'
)
order by b
显然,查询1最适合维护,但它是否为此牺牲了很多性能?
哪个最好?
编辑
抱歉,我忘了加上
按顺序
子句中的查询,以指示为什么它首先都需要是子查询!
编辑
好吧,我以为这会是一个简单的答案,但我忘了我在这里说的是数据库!通过分析器运行它表明没有进行优化,但这当然可能是因为我的表中只有4行。我希望有一个更简单的“是”或“否”。必须建立一些更复杂的测试。
我现在在mysql上,但是我想得到一个一般的答案…