Jak ustalić, co jest bardziej efektywne: ODRÓŻNIAĆ I GDZIE ISTNIEJE?
Na przykład mam 3 tabele:user
, group
ipermission
oraz 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!