Meu SQL:
select count('1')
from plays,
promotion,
partner
where
partner.id = 1
and promotion.partner_id = partner.id
and plays.promotion_id = promotion.id
SQL gerado pelo Eloquent (um PHP ORM laravel)
select count(*) as aggregate
from `plays`
inner join `promotion` on `promotion`.`id` = `plays`.`promotion_id`
where `promotion`.`partner_id` = 1
- Minha versão está usando a junção interna e externa?
- a junção interna do exemplo gerado é melhor ou é a mesma da minha versão?
Existem 3 tabelas neste exemplo:
plays
int id
int promotion_id
promotion
int id
int partner_id
partner
int id
O sql serve apenas para contar todas as jogadas que pertencem a um parceiro (através da tabela de promoção)
O tipo de junção padrão é a junção interna.
A segunda consulta pode ser melhor, pois evita uma junção extra à tabela parceira. O valor de ID de parceiro necessário está disponível na tabela de promoção. O impacto provavelmente será mínimo neste caso.
Eu recomendaria prefixar as colunas de id de chave primária com o nome da tabela (forma singular); play_id, promotion_id e partner_id. A maioria das ferramentas de design permite isso, mas pode ser o padrão para o formulário que você possui.
Aprenda a usar os planos de explicação para entender como a consulta será executada. Isso não é infalível, pois o plano de execução pode ser influenciado pelo tamanho das tabelas e outros fatores. Bancos de dados diferentes podem gerar planos de execução diferentes.