Nie ma różnicy między tymi dwoma instrukcjami, a optymalizator przekształci IN
w =
, gdy IN
będzie zawierał tylko jeden element.
Chociaż, gdy masz takie pytanie, po prostu uruchom obie instrukcje, uruchom ich plan wykonania i zobacz różnice. Tutaj - nie znajdziesz żadnych.
Po wielkim wyszukiwania w internecie, znalazłem dokument na SQL w celu wspierania tego (zakładam, że odnosi się do wszystkich DBMS):
Jeśli jest tylko jedna wartość wewnątrz nawiasu, to Commend jest równoważna
GDZIE wartosc1 "COLUMN_NAME" =”
Here is the link to the document.
Oto plan wykonania obu zapytań w Oracle (większość DBMS rozpatrzy to samo):
EXPLAIN PLAN FOR
select * from dim_employees t
where t.identity_number = '123456789'
Plan hash value: 2312174735
-----------------------------------------------------
| Id | Operation | Name |
-----------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
| 2 | INDEX UNIQUE SCAN | SYS_C0029838 |
-----------------------------------------------------
a dla IN()
:
EXPLAIN PLAN FOR
select * from dim_employees t
where t.identity_number in('123456789');
Plan hash value: 2312174735
-----------------------------------------------------
| Id | Operation | Name |
-----------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
| 2 | INDEX UNIQUE SCAN | SYS_C0029838 |
-----------------------------------------------------
Jak widać, oba są identyczne . To jest w indeksowanej kolumnie. To samo dotyczy kolumny bez indeksu (tylko pełne skanowanie tabeli).
Nie próbuj uczyć się milionów zasad, które będą w jakiś sposób oznaczać, że zawsze napiszesz najlepszy możliwy kod. Napisz jasny, prosty, * zrozumiały * kod, który oczywiście daje prawidłowe wyniki. Ustaw cele wydajności. Następnie * zmień * wydajność swojego kodu. Jeśli działa poprawnie, przejdź dalej. Tylko jeśli nie osiąga dobrych wyników, poświęć temu więcej czasu. W tym czasie wypróbowanie drobnej zmiany, takiej jak w pytaniu, a następnie ponowne zmierzenie * jest proste.Może jeden jest szybszy od drugiego, ale * czy robi to znaczącą różnicę *? –
Uzgodnione @Damien_The_Unbeliever. Ale czasami jestem bardziej zaniepokojony podczas pisania pojedynczej linii lub słowa z SQL –
Są one 99,9999999% tak samo. Dopóki nie zrobisz czegoś takiego jak 'WHERE wartość_kolumny IN ((wybierz wartość z listy_wartości, gdzie wartość = 'Wszystkie' limit 1))' wtedy jesteś w porządku. Podkwerendy mają ogromny wpływ na wydajność klauzuli 'in()'. – MonkeyZeus