Рассмотрим представление, состоящее из нескольких таблиц ... например, 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)
Могу ли я еще что-нибудь сделать, чтобы сделать это быстрее?