2009-03-17 12 views
7

Quale pensi sia più veloce in uno script PHP:

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

o

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

grandi risposte a tutti, grazie ... io upvoted tutti così è ya otterrebbe qualche rappresentante –

risposta

13

Dipende da tanti fattori che io non so nemmeno cosa per cominciare.

Tuttavia, come regola, si esegue l'ordinamento sul lato del database.

Gli indici, le collazioni e tutto questo, aiutano.

+1

+1. Pitching il codice contro il database porta solo a crepacuore. – Learning

+0

+1, ma prova la risposta di karim79 (test di temporizzazione) solo per essere sicuro. – altermativ

+0

In realtà, ci sono casi in cui l'ordinamento lato client è più veloce, e ho persino usato questo in una delle mie applicazioni. I test di temporizzazione non funzioneranno con le ellissi nella clausola SELECT e FOR e non sappiamo cosa sostituirli. – Quassnoi

2

Se il campo ordinato è indicizzato, direi probabilmente la query SQL. In caso contrario, non ne sono sicuro, ma non posso immaginare che sarà eccessivamente evidente in entrambi i casi, a meno che tu non abbia a che fare con un numero di righe assurdamente alto.

2

ORDER BY sarà quasi sempre più veloce.

4

Quale pensi sia più veloce in uno script php:

Il ORDER BY non esegue nello script PHP - Esegue nel database, prima che i dati vengono recuperati dallo script PHP. Mi scuso se questo sembra pedante, voglio solo assicurarmi di capirlo.

In ogni caso, il motivo per cui utilizzerei ORDER BY è che il database ha accesso agli indici e alle pagine memorizzate nella cache dal database. L'ordinamento in PHP ordina naturalmente il set di dati in memoria, ma non ha accesso a nessun indice.

+0

Grazie per il chiarimento ... Capisco, ho appena provato a dare un piccolo contesto. –

2

A mio parere, niente batte in realtà tempi la cosa in modo da realmente, realmente sappiamo per certo:

$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

Se c'è un limite alla prima query, e l'insieme di righe della query sarebbe partita senza la LIMIT è molto più grande del LIMIT, quindi ORDER BY sulla query è SICURAMENTE più veloce.

Vale a dire, se sono necessarie le prime 50 righe da una tabella di 10.000 righe, è molto più veloce avere il database ordinato per te e restituire solo le prime 50 righe, piuttosto che recuperare tutte le 10.000 righe e ordinali da soli in PHP. Questo è probabilmente rappresentativo della stragrande maggioranza di ciò che accadrà nelle applicazioni del mondo reale

Se ci sono casi in cui l'ordinamento in PHP è paragonabile, sono pochi e distanti tra loro.

Inoltre, SQL di ordinamento è molto più potente - è banale per ordinare su più colonne, subquery, i valori di ritorno delle funzioni di aggregazione, ecc