采取以下查询:
select * from
(
select a, b
from c
UNION
select a, b
from d
)
where a = 'mung'
order by b
优化器通常会计算出我正在过滤值“mung”并因此过滤子查询中每个查询的mung。
OR
它会在子查询联合中运行每个查询并将结果返回到外部查询进行过滤(如查询可能建议的那样)
在这种情况下,以下查询会表现得更好:
select * from
(
select a, b
from c
where a = 'mung'
UNION
select a, b
from d
where a = 'mung'
)
order by b
显然查询1最适合维护,但它是否牺牲了很多性能呢?
哪个最好?
修改 抱歉,我忽略了在查询中添加 order by 子句,以表明为什么一开始就需要成为子查询!
修改 好吧,我认为这将是一个简单的答案,但我忘了我在这里谈论数据库!通过分析器运行它表明没有进行优化,但这当然可能是因为我的表中只有4行。我希望更简单的是或否..将需要设置一些更复杂的测试。
我现在在mySQL上,但我在这里得到了一般答案......
答案 0 :(得分:2)
使用:
SELECT x.a,
x.b
FROM TABLE_X x
WHERE x.a = 'mung'
UNION
SELECT y.a,
y.b
FROM TABLE_Y y
WHERE y.a = 'mung'
UNION ALL
- 它会比UNION