2009-03-17 12 views
7

Co myślisz jest szybszy w skrypcie PHP:

$query = "SELECT... FROM ... ORDER BY first_val"; 

lub

while($row = odbc_fetch_array($result)) 
    $arrayname[] = array(
     "first_key" => $row['first_val'], 
     "second_key" => $row['second_val'], 
     etc... 
    ); 
sort($arrayname); 
+0

Wielkie odpowiedzi każdy, dzięki ... I upvoted wszyscy tak ya dostałbym trochę rep –

Odpowiedz

13

To zależy od tak wielu czynników, że ja nawet nie wiem od czego zacząć.

Ale z reguły sortowanie odbywa się po stronie bazy danych.

Indeksy, sortowanie i to wszystko, pomagają.

+1

+1. Podział kodu na bazę danych prowadzi do złamanych serc. – Learning

+0

+1, ale spróbuj odpowiedzi karim79 (testy czasowe), aby się upewnić. – altermativ

+0

W rzeczywistości zdarzają się sytuacje, gdy sortowanie po stronie klienta jest szybsze, a ja użyłem go nawet w jednej z moich aplikacji. Testy czasowe zawiodą na elipsach w klauzuli SELECT i FOR, a my nie wiemy, co je zastąpić. – Quassnoi

2

Jeśli pole zamówione jest zindeksowane, powiedziałbym prawdopodobnie zapytanie SQL. Jeśli nie, nie jestem pewien, ale nie mogę sobie wyobrazić, że będzie to nadmiernie zauważalne w obu kierunkach, chyba że masz do czynienia z absurdalnie dużą liczbą rzędów.

2

ORDER BY prawie zawsze będzie szybszy.

4

Co myślisz jest szybszy w skrypcie PHP:

ORDER BY nie wykonuje w skrypcie PHP - to wykonuje się w bazie danych, zanim dane są pobierane przez skrypt PHP. Przepraszam, jeśli wydaje się to pedantyczne, chcę tylko upewnić się, że to rozumiesz.

W każdym razie, powód, dla którego użyłbym ORDER BY jest to, że baza danych ma dostęp do indeksów i stron z pamięci podręcznej z bazy danych. Sortowanie w PHP sortuje oczywiście zestaw danych w pamięci, ale nie ma dostępu do żadnego indeksu.

+0

Dzięki za wyjaśnienie ... Rozumiem, po prostu starałem się podać ci mały kontekst. –

2

Moim zdaniem nic nie przebije faktycznie rozrządu rzeczy więc naprawdę wiem na pewno:

$time_start = microtime(true); 

// Try the ORDER BY and sort($array) variants here 

$time_end = microtime(true); 
$time = $time_end - $time_start; 

echo "It took $time seconds"; 
2

Jeśli istnieje limit na pierwszym zapytaniu, a zestaw wierszy zapytania byłby pasują bez LIMIT jest o wiele większy niż LIMIT, a następnie ORDER BY na zapytanie jest ZDECYDOWANIE szybszy.

To znaczy, że jeśli potrzebujesz 50 najlepszych wierszy z tabeli 10.000 wierszy, to znacznie szybciej będzie mieć sortowanie bazy danych dla ciebie i zwrócisz tylko te górne 50 wierszy, niż pobrać wszystkie 10.000 wierszy i posortuj je samemu w PHP. Prawdopodobnie jest to reprezentatywne dla znacznej większości tego, co będzie się działo w rzeczywistych aplikacjach.

Jeśli w ogóle istnieją przypadki, w których sortowanie w PHP jest nawet porównywalne, są one bardzo nieliczne.

Dodatkowo SQL sortowania jest znacznie mocniejszy - to trywialne do sortowania na wielu kolumnach, podzapytania, wartości powrotu funkcji kruszywa itp