Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Kolejność w klauzuli WHERE
eerie
post
Post #1





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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ń.
Go to the top of the page
+Quote Post
Salvation
post
Post #3





Grupa: Zarejestrowani
Postów: 403
Pomógł: 72
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:57