我的SQL:
select count('1')
from plays,
promotion,
partner
where
partner.id = 1
and promotion.partner_id = partner.id
and plays.promotion_id = promotion.id
Eloquent 生成的 SQL(laravel PHP ORM)
select count(*) as aggregate
from `plays`
inner join `promotion` on `promotion`.`id` = `plays`.`promotion_id`
where `promotion`.`partner_id` = 1
- 我的版本使用的是 inner out outer join 吗?
- 生成示例的内部连接更好,还是与我的版本相同?
本例中有 3 个表:
plays
int id
int promotion_id
promotion
int id
int partner_id
partner
int id
sql只是统计一个partner的所有plays(通过promotion表)
默认连接类型是内部连接。
第二个查询可能更好,因为它避免了对合作伙伴表的额外连接。所需的合作伙伴 ID 值可从促销表中获得。在这种情况下,影响可能很小。
我建议在主键 id 列前加上表名(单数形式);play_id、promotion_id 和 partner_id。大多数设计工具都允许这样做,但可能默认为您拥有的形式。
学习使用解释计划来了解查询将如何执行。这并非万无一失,因为执行计划可能会受到表大小和其他因素的影响。不同的数据库可能会生成不同的执行计划。