Czy programiści mają do czynienia z regułami, kiedy używać join zamiast podkwerendy lub czy są one takie same.Dołącz zapytanie lub podkwerendę
Odpowiedz
Zależy od RDBMS. Powinieneś porównać plany wykonania dla obu zapytań.
Z mojego doświadczenia z Oracle 10 i 11 plany wykonania są zawsze takie same.
Teoretycznie każde podzapytanie może zostać zmienione na zapytanie łączące.
Wydajność, nie ma żadnej różnicy w większości nowoczesnych silników DB.
Problem z podzapytaniami polega na tym, że możesz zakończyć działanie podrzędnego zestawu bez żadnego klucza, więc dołączenie do nich będzie droższe.
Jeśli to możliwe, zawsze staraj się tworzyć zapytania JOIN i filtrować przy użyciu klauzuli ON, zamiast WHERE (chociaż powinno być to takie samo, jak w tym przypadku zoptymalizowane są nowoczesne silniki).
Tak jak wiele rzeczy, to zależy. - jak złożone jest podzapytanie - w zapytaniu, jak często jest wykonywane podzapytanie. Próbuję unikać podkwerend, kiedy tylko mogę. Zwłaszcza gdy oczekują dużych zestawów wyników nigdy nie używaj podkwerend - w przypadku, gdy podzapytanie jest wykonywane dla każdego elementu zestawu wyników.
dbać, Alex
W SQL Server podzapytanie skorelowane zwykle wykonuje gorzej niż przyłączyć lub często nawet lepsze pod kątem wydajności, sprzężenie do tabeli pochodnej. Prawie nigdy nie piszę podkwerendy dla wszystkiego, co będzie trzeba wykonać wiele razy. Dzieje się tak dlatego, że skorelowane podkwerendy często w zasadzie przekształcają zapytanie w kursor i uruchamiają jeden wiersz na raz. W bazach danych zwykle lepiej jest robić rzeczy w sposób oparty na zestawach.
Zignorujmy teraz wpływ na wydajność (tak jak powinniśmy, jeśli zdajemy sobie sprawę, że "przedwczesna optymalizacja jest źródłem wszelkiego zła").
Wybierz to, co wygląda jaśniej i łatwiej je konserwować.
Pierwsza zasada to "Dokładnie podaj zapytanie". Drugą zasadą jest "proste i oczywiste sformułowanie zapytania" (gdzie zwykle dokonuje się wyborów). Trzeci to "wypowiedz zapytanie, aby działało wydajnie".
Jeśli jest to dbms z dobrym procesorem kwerendy, równoważne projekty kwerend powinny powinny skutkować planów kwerend, które są takie same (lub co najmniej równie skuteczne).
Moja największa frustracja związana z używaniem MySQL po raz pierwszy była świadoma, że muszę być uprzedzony wobec optymalizatora. Po długich doświadczeniach z produktami Oracle, SQL Server, Informix i innymi produktami DBMS, bardzo rzadko spodziewałem się zajmować takimi problemami. Teraz jest lepiej z nowszymi wersjami MySQL, ale wciąż jest to coś, z czym muszę częściej zwracać uwagę, niż na inne.
- 1. Tricky SQL Dołącz zapytanie
- 2. Dołącz Wnuki w EF Zapytanie
- 3. LEWE ZEWNĘTRZNE DOŁĄCZ i NIE ISTNIEJĄ zapytanie
- 4. Kryteria Hibernowania dołącz jedno zapytanie do wielu
- 5. Zapytanie Solr (q) lub zapytanie filtrujące (fq)
- 6. SQL Server "nie może wykonać funkcji agregującej dla wyrażenia zawierającego agregację lub podkwerendę", ale Sybase może
- 7. Prolog "lub" operator, zapytanie
- 8. Mongoose lub zapytanie
- 9. Laravel 4 Konstruktor kwerend: LEWY DOŁĄCZ ... I ... zapytanie
- 10. Mongodb - dołącz lub wyklucz niektóre elementy ze sterownikiem C#
- 11. Morphia zapytanie z lub operator
- 12. MongoDB $ lub zapytanie w Meteor?
- 13. Android SQLite: które zapytanie ("zapytanie" lub "rawQuery") jest szybsze?
- 14. LINQ do jednostki Dołącz tabelę z wielokrotnych lub warunków
- 15. Dołącz dwóch zapytań SQL
- 16. Dlaczego request.getRemoteAddr() zwraca ipv4 lub ipv6 w zależności od kontekstu (zapytanie pocztowe lub zapytanie ajax)
- 17. Co jest szybsze? File_exist lub zapytanie MySQL?
- 18. Zoptymalizuj zapytanie lub zasugeruj równoważnik LINQ.
- 19. Jak skonstruować $ lub zapytanie w MgO
- 20. Zatrzymaj lub zakończ długotrwałe zapytanie w JDBC
- 21. Zapytanie Django __isnull = Prawda lub = Brak
- 22. Zapytanie Django przy użyciu warunku LUB
- 23. MongoDB zapytanie produkuje lub odpowiedź zamiast I
- 24. Mongo DB $ lub zapytanie w PHP
- 25. BigQuery DOŁĄCZ Błąd
- 26. GreenDAO Lewy Dołącz
- 27. Double LEFT DOŁĄCZ
- 28. LINQ podmiotom Dołącz + Gdzie Metoda
- 29. UŻYJ WIELU LEWEGO DOŁĄCZ DO
- 30. Warunkowo dodaj lub dołącz do pliku w skrypcie linux
Czy to prawda w przypadku skorelowanych podzapytań? Dlaczego kwalifikujesz się z "teoretycznie"? Czy możesz ukończyć swoją odpowiedź na to pytanie? – dkretz