![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 4 Dołączył: 6.05.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam taki oto problem.
Mam pobrać z bazy danych kilka rekordów wg jakiegoś _skomplikowanego_ kryterium. I teraz można tak: 1. pobrać skomplikowanym zapytaniem SQL te kilka rekordów, albo 2. pobrać dużą ilość rekordów i potem PHPem wyłowić odpowiednie rekordy Szybciej zadziała 1 czy 2? Dzięki z góry za odpowiedź. Ten post edytował wojckr 16.09.2007, 21:09:28 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 10 Dołączył: 8.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Wyszukiwanie odpowiednich rekordów z tablicy PHP'owej ma złożoność ~n.
Możesz to przyspieszyć indeksując tę tablicę wartościami komórki, według której będziesz coś wyszukiwał, wtedy złożoność masz ~log(n). Jednak lepiej zrobić to na poziomie bazy danych, tam zakładając index na daną kolumnę dostajesz również złożoność obliczeniową ~log(n). Nie jestem na 100% pewny, ale MySQL ma jedynie zaimplementowany algorytm NESTED LOOP do łączenia tabel. Ma on kiepską złożoność obliczeniową dlatego w bardziej skomplikowanym zapytaniu staraj się uzyskać maksymalną selekcję przed złączaniem tabel. Mam nadzieję, że to ci coś pomogło, ale generalnie bym ten problem podsumował tak: - wszystkie kwestie związane z pozyskaniem danych staraj się rozwiązać na poziomie bazy danych, gdzie masz dedykowane do tego narzędzia. Cały czas pracują nad nimi developerzy i raczej bym polegał na ich doświadczeniu zamiast implementować własne algorytmy przetwarzania danych. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 00:05 |