3
respostas

Dúvida em relação à performance

Boa Noite,

Uma curiosidade minha. Eu resolvi o problema proposto fazendo o inverso ou seja de "curso" fazendo joins até "resposta".

Minha dúvida é em relação à performance.

Qual ficaria melhor no plano de execução?

Segue abaixo a query que utilizei:

select c.nome, AVG(n.nota) from curso c join secao s on s.curso_id = c.id join exercicio e on e.secao_id = s.id join resposta r on r.exercicio_id = e.id join nota n on n.resposta_id = r.id GROUP BY c.nome

3 respostas

Henrique,

A performance na verdade será medida através da granularidade (diversidade de registros) que você terá em seu banco de dados. O que você pode fazer para otimizar sua performance é criar índices que sejam coerentes com o relacionamento que você fará entre as tabelas e, sempre que possível, criar foreign keys entre as mesmas.

Fala Henrique, tudo bem?

Não há diferença de performance em apenas realizar joins de uma forma ou da exata forma contraria porque internamente o SQL Server fará o mesmo caminho para a execução da query, tendo diferença apenas na sua leitura da mesma.

O interessante para melhora de performance é criar índices, chaves e analisar o plano de execução (além de evitar funções, loops ou subqueries desnecessárias)

É conforme o Leonardo falou, a ordem dos joins não irá afetar seu desempenho. E ressalto o que foi dito acima, para melhoria de desempenho sugiro a criação de um índice.