Jak ustalić, co jest bardziej efektywne: ODRÓŻNIAĆ I GDZIE ISTNIEJE?

Na przykład mam 3 tabele:user, group ipermissionoraz dwie wiele relacji między nimi:user_groups igroup_permissions.

Muszę wybrać wszystkie uprawnienia danego użytkownika, bez powtórzeń. Za każdym razem, gdy napotykam podobny problem, nie mogę określić, która wersja zapytania jest lepsza:

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 

Mam wystarczające doświadczenie, aby wyciągać wnioski na podstawie wyjaśnień. Pierwsze zapytanie ma podkwerendę, ale moje doświadczenia wykazały, że pierwsze zapytanie jest szybsze. Być może z powodu dużej liczby filtrowanych uprawnień.

Co byś zrobił w tej sytuacji? Czemu? Dzięki!

questionAnswers(1)

yourAnswerToTheQuestion