Я хочу оптимизировать свой SQL.
Моя схема базы данных:
ДОМА
- home_id
- адрес
- город
- состояние
- молния
- primary_photo_group_id
HOME_PHOTOS
- photo_id (первичный ключ)
- home_id (домашний первичный ключ)
- photo_group_id (группа фотографий - это одно и то же изображение, изменение размера от миниатюры до большого размера)
- home_photo_type_id (размер изображения, будь то миниатюра или большой размер)
- photo_url_dir (расположение файловой системы, в которой хранится фотография)
Проблема
Вполне возможно, что у "дома" нет фотографии, связанной с домом. В этом случае primary_photo_group_id
= 0 . Otherwise,
primary_photo_group_id` равно group_id фотографии для использования в качестве основной фотографии.
Медленный SQL (b / c из UNION)
SELECT homes.home_id,
address,
city,
state,
zip,
photo_id,
photo_url_dir
FROM homes, home_photos
WHERE homes.home_id = home_photos.home_id
AND primary_photo_group_id = home_photo_group_id
AND home_photo_type_id = 2
UNION
SELECT homes.home_id,
address,
city,
state,
zip,
null,
null
FROM homes
WHERE primary_photo_group_id = 0
Что бы я хотел сделать
Я бы хотел избавиться от UNION, так как мне пришлось искать по всей таблице 2 раза. Как я могу избавиться от UNION, так как мне нужно проверить случай, когда primary_photo_group_id = 0 и если он не равен 0, то запросить home_photos
таблицу
Вот псевдокод, который должен произойти
SELECT homes.home_id,
address,
city,
state,
zip,
photo_id, (include only if primary_photo_group_id != 0)
photo_url_dir (include only if primary_photo_group_id != 0)
FROM homes,
home_photos (include only if primary_photo_group_id != 0)
WHERE
primary_photo_group_id = 0
ELSE
homes.home_id = home_photos.home_id
AND primary_photo_group_id = home_photo_group_id
AND home_photo_type_id = 2