PHP / SQL: ORDER BY или сортировать ($ массив)? - PullRequest
7 голосов
/ 17 марта 2009

Что вы думаете, быстрее в сценарии PHP:

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

или

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

Ответы [ 6 ]

14 голосов
/ 17 марта 2009

Это зависит от многих факторов, и я даже не знаю, с чего начать.

Но, как правило, вы выполняете сортировку на стороне базы данных.

Указатели, сопоставления и все это, они помогают.

4 голосов
/ 17 марта 2009

Что вы думаете, быстрее в PHP-скрипте:

ORDER BY не выполняется в скрипте PHP - он выполняется в базе данных, прежде чем данные будут получены скриптом PHP. Извиняюсь, если это кажется педантичным, я просто хочу убедиться, что вы понимаете это.

В любом случае, я бы использовал ORDER BY, потому что база данных имеет доступ к индексам и кэшированным страницам из базы данных. Сортировка в PHP, конечно, сортирует набор данных в памяти, но не имеет доступа ни к одному индексу.

2 голосов
/ 18 марта 2009

Если в первом запросе есть LIMIT, и набор строк, который будет соответствовать запросу без LIMIT, намного больше, чем LIMIT, то ORDER BY в запросе НАДЕЖНО быстрее.

То есть, если вам нужны первые 50 строк из таблицы 10000 строк, гораздо быстрее иметь сортировку базы данных и возвращать только эти первые 50 строк, чем извлекать все 10000 строк и сортировать их сами в PHP. Это, вероятно, представитель подавляющего большинства того, что произойдет в реальных приложениях

Если есть вообще случаи, когда сортировка в PHP даже сопоставима, их мало и далеко.

Кроме того, сортировка SQL намного мощнее - сортировать по нескольким столбцам, подзапросам, возвращаемым значениям агрегатных функций и т. Д. Тривиально *

2 голосов
/ 18 марта 2009

На мой взгляд, ничто не сравнится с выбором времени, так что вы действительно точно знаете:

$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 голосов
/ 17 марта 2009

ORDER BY почти всегда будет быстрее.

2 голосов
/ 17 марта 2009

Если упорядоченное поле проиндексировано, я бы сказал, вероятно, SQL-запрос. Если нет, то я не уверен, но я не могу представить, что это будет слишком заметно в любом случае, если вы не имеете дело с нелепо большим количеством строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...