Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SQL czy PHP
Forum PHP.pl > Forum > Bazy danych > MySQL
wojckr
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ź.
slepiec
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.
prond
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.
Cezar708
popieram przedmówców, jeśli chodzi o dane zdecydowanie jak najwięcej robić po stronie bazy danych!
vokiel
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ą).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.