Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Kolejność w klauzuli WHERE
Forum PHP.pl > Forum > Przedszkole
eerie
Czy kolejność warunków w klauzuli WHERE (dla MySQL) ma znaczenie? Czy `user_id` powinno być na początku (1.) bądź nie ma to znaczenia (2.)?

Cytat
1. SELECT * FROM `user` WHERE `user_id` = 1 AND `user_birth` >= '2000-01-01 00:00:00'
2. SELECT * FROM `user` WHERE `user_birth` >= '2000-01-01 00:00:00' AND `user_id` = 1
trueblue
Może mieć znaczenie jeśli jest założony indeks wielokolumnowy na user_id+user_birth.

Jeśli masz wątpliwości porównaj wynik EXPLAIN SELECT ... dla obydwu zapytań.
Salvation
Będzie mieć znaczenie, ale nie wiem jednak jak bardzo - w czasach oczywiście.

W pierwszym rozwiązaniu determinujesz konkretnego usera po ID = 1, a dopiero później sprawdzasz czy urodził się po roku 2000.
W drugim przypadku pobierasz zakres użytkowników, którzy urodzili się po roku 2000 i dopiero później determinujesz usera.

Dodatkowe operacje na jednym wyniku (opcja pierwsza) _zawsze_ będzie szybsza niż na zbiorze (opcja druga).
Jednak przy małej aplikacji (<100k) nie będzie to mieć raczej aż takiego znaczenia.
trueblue
Cytat(Salvation @ 4.07.2023, 09:10:57 ) *
Będzie mieć znaczenie, ale nie wiem jednak jak bardzo - w czasach oczywiście.

W pierwszym rozwiązaniu determinujesz konkretnego usera po ID = 1, a dopiero później sprawdzasz czy urodził się po roku 2000.
W drugim przypadku pobierasz zakres użytkowników, którzy urodzili się po roku 2000 i dopiero później determinujesz usera.

Dodatkowe operacje na jednym wyniku (opcja pierwsza) _zawsze_ będzie szybsza niż na zbiorze (opcja druga).

Nie ma to znaczenia. Niezależnie od tego czy założony jest indeks tylko na jedno z tych pól, na obydwa (oddzielne indeksy) czy na żadne z nich.
Optymalizator bazy danych, jeśli zachodzi potrzeba, sam dobiera kolejność warunków.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.