Como determinar o que é mais eficaz: DISTINCT ou WHERE EXISTS?
Por exemplo, tenho 3 tabelas:user
, group
epermission
e dois muitos relacionamentos entre eles:user_groups
egroup_permissions
.
Eu preciso selecionar todas as permissões de determinado usuário, sem repetições. Toda vez que encontro um problema semelhante, não consigo determinar qual versão de uma consulta é melhor:
SELECT permisson_id FROM group_permission WHERE EXISTS(
SELECT 1 FROM user_groups
WHERE user_groups.user_id = 42
AND user_groups.group_id = group_permission.group_id
)
SELECT DISTINCT permisson_id FROM group_permission
INNER JOIN user_groups ON user_groups.user_id = 42
AND user_groups.group_id = group_permission.group_id
Eu tenho experiência suficiente para tirar conclusões baseadas em explicar. A primeira consulta tem subconsulta, mas minhas experiências mostraram que a primeira consulta é mais rápida. Talvez por causa do grande número de permissões filtradas no resultado.
o que você faria nesta situação? Por quê? Obrigado!