Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> SQL czy PHP, co zadziała szybciej?
wojckr
post 16.09.2007, 21:05:43
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
Go to the top of the page
+Quote Post
slepiec
post 16.09.2007, 21:16:14
Post #2





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 23.08.2007

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


to może ja sie dołożę do tego tematu; Jak szybkie są w porównaniu z php funkcje w mysql'u, które na przykład pobierają jakieś dane z jednej tabeli i przy użyciu kursora updatują dane w innej tabeli.

ale co do twojego pytania to ja bym wybrał 1.
Go to the top of the page
+Quote Post
prond
post 17.09.2007, 09:45:10
Post #3





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.


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
Go to the top of the page
+Quote Post
Cezar708
post 17.09.2007, 10:16:59
Post #4





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


popieram przedmówców, jeśli chodzi o dane zdecydowanie jak najwięcej robić po stronie bazy danych!
Go to the top of the page
+Quote Post
vokiel
post 17.09.2007, 10:18:23
Post #5





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Tak jak mówi prond najlepiej wykonać większość selekcji na bazie danych.
Engine bazy jest zoptymalizowany do przetwarzania zapytań, zrobi to najprawdopodobniej szybciej, poza tym ilość przesłanych danych będzie mniejsza.

Jeżeli zrobisz bardzo ogólne zapytanie do bazy, otrzymasz masę rekordów wynikowych, których obrobienie w php zajmie więcej czasu niż bezpośrednio na bazie (trzeba je przesłać, wczytać, przerobić, odesłać). A gdy zrobisz zapytanie na bazie, to cala selekcja odbywa się w obrębie bazy (nie ma przesyłania takiej ilości danych pomiędzy interpreterem php a bazą).


--------------------
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: 12.06.2025 - 19:47