2009-03-17 14 views
7

¿Cuál cree que es más rápido en un 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

grandes respuestas a todos, gracias ... Me upvoted todo el mundo tan es YA'LL obtendría algún representante –

Respuesta

13

Depende de muchos factores que no sé ni lo que, para empezar.

Pero, por regla general, se realiza la ordenación en el lado de la base de datos.

Los índices, colaciones y todo esto, ayudan.

+1

+1. Lanzar su código contra la base de datos solo lleva a desgarradores. – Learning

+0

+1, pero prueba la respuesta de karim79 (pruebas de tiempo) solo para estar seguro. – altermativ

+0

En realidad, hay casos en que la clasificación del lado del cliente es más rápida, e incluso la usé en una de mis aplicaciones. Las pruebas de tiempo fallarán en elipses en las cláusulas SELECT y FOR, y no sabemos qué sustituirlas. – Quassnoi

2

Si el campo ordenado está indexado, diría probablemente la consulta SQL. Si no, no estoy seguro, pero no puedo imaginar que será demasiado notable de ninguna manera a menos que estés lidiando con una cantidad absurdamente grande de filas.

2

ORDER BY casi siempre será más rápido.

4

¿Cuál cree que es más rápido en un script PHP:

El ORDER BY no se ejecuta en el script PHP - se ejecuta en la base de datos, antes de que los datos se recuperan por el script PHP. Disculpas si esto parece pedante, solo quiero asegurarme de que entiendas esto.

De todos modos, la razón por la que usaría ORDER BY es que la base de datos tiene acceso a índices y páginas en caché de la base de datos. La ordenación en PHP ordena el conjunto de datos en la memoria del curso, pero no tiene acceso a ningún índice.

+0

Gracias por la aclaración ... Lo entiendo, intenté darle un poco de contexto. –

2

En mi opinión, no hay nada como realmente medir el tiempo del que por lo que realmente sabe con seguridad:

$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

Si hay un límite en la primera consulta, y el conjunto de filas de la consulta habría partido sin la LIMIT es mucho más grande que LIMIT, luego ORDER BY en la consulta es DEFINITIVAMENTE más rápido.

Es decir, si necesita las 50 filas superiores de una tabla de 10,000 filas, es mucho más rápido tener la base de datos ordenada para usted, y devolver solo las 50 filas superiores, que recuperar las 10,000 filas y ordene usted mismo en PHP. Esto es probablemente representativo de la gran mayoría de lo que sucederá en las aplicaciones del mundo real

Si hay algún caso en el que la clasificación en PHP sea comparable, son pocos y distantes.

Además, la clasificación de SQL es mucho más potente - es trivial para ordenar en varias columnas, subconsultas, los valores de retorno de las funciones de agregado, etc.