我正在寻求优化我的 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。否则,
primary_photo_group_id` 等于用作主照片的照片的 group_id。
慢 SQL(UNION 的 b/c)
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
最佳答案
如果第二个查询比第一个慢,那是因为你在 {home_id, primary_photo_group_id}
上有一个索引(或者可能只是 {home_id}
),但不是单独在 {primary_photo_group_id}
上。如果您想提高查找该列的性能,则需要该列的索引。
关于SQL:帮我优化 mySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1039771/