考虑一个由多个表组成的视图...例如 a v_active_car
,它由car
连接到body
、engine
和的表wheels
组成stereo
。它可能看起来像这样:
v_active_cars
看法
SELECT * FROM car
INNER JOIN body ON car.body = body.body_id
INNER JOIN engine ON car.engine = engine.engine_id
INNER JOIN wheels ON car.wheels = wheels.wheels_id
INNER JOIN stereo ON car.stereo = stereo.stereo_id
WHERE car.active = 1
AND engine.active = 1
AND wheels.active = 1
AND stereo.active = 1
汽车的每个组件都有一个“活动”标志。现在,我需要找到现役汽车中可用的所有立体声音响。要做到这一点,需要使用整个视图,而不仅仅是stereo
桌子——仅仅因为立体声音响处于活动状态并不意味着它可以在汽车中使用。
所以我可以
SELECT DISTINCT stereo_id FROM v_active_cars
尽管这可能会返回非常少量的行,但它仍然是一个非常慢的查询。
我试过这个,但它更慢:
SELECT stereo_id FROM stereo WHERE EXISTS
(SELECT 1 FROM v_active_cars WHERE stereo_id = stereo.stereo_id)
我还能做些什么来加快速度吗?