Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Kolejność w klauzuli WHERE
eerie
post 3.07.2023, 17:14:40
Post #1





Grupa: Zarejestrowani
Postów: 81
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
trueblue
post 3.07.2023, 18:03:40
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
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 4.07.2023, 08:10:57
Post #3





Grupa: Zarejestrowani
Postów: 344
Pomógł: 70
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 4.07.2023, 09:40:59
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 18:45