[MySQL] Kolejność w klauzuli WHERE |
[MySQL] Kolejność w klauzuli WHERE |
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 |
|
|
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ń. -------------------- |
|
|
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. |
|
|
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%) |
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. -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 01:04 |