Не знаю - как насчёт 5000 записей, но если таблица небольшая, то сортировка массива средствами php будет быстрее.
Тест:
#
# Структура таблицы `test`
#
CREATE TABLE test (
id tinyint(1) NOT NULL auto_increment,
alpha varchar(5) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;
#
# Дамп данных таблицы `test`
#
INSERT INTO test (alpha) VALUES ('foo');
INSERT INTO test (alpha) VALUES ('bar');
INSERT INTO test (alpha) VALUES ('buzz');
INSERT INTO test (alpha) VALUES ('this');
INSERT INTO test (alpha) VALUES ('value');
INSERT INTO test (alpha) VALUES ('temp');
INSERT INTO test (alpha) VALUES ('dat');
INSERT INTO test (alpha) VALUES ('more');
INSERT INTO test (alpha) VALUES ('raw');
PHP:
<?
mysql_selectdb("test",mysql_connect("","test",""));
$start_time_ms=(double)time()+microtime();
$query=mysql_query("select alpha from test order by alpha");
while($data=mysql_fetch_row($query)){
echo$data[0]."<br>
";}
$running_time=(double)time()+microtime()-$start_time_ms;
echo"db order running time: $running_time msec<br><br>
";
$start_time_ms=(double)time()+microtime();
$query=mysql_query("select alpha from test");
while($data=mysql_fetch_row($query)){
$array[]=$data[0];}
sort($array);
foreach($array as $value){
echo$value."<br>
";}
$running_time=(double)time()+microtime()-$start_time_ms;
echo"array sort running time: $running_time msec";
?>
Результаты:
bar
buzz
dat
foo
more
raw
temp
this
value
db order running time: 0.010800957679749 msec
bar
buzz
dat
foo
more
raw
temp
this
value
array sort running time: 0.0090950727462769 msec
Как видим, разница небольшая, но во второй части теста мы применяем два цикла вместо одного, но, тем не менее, время выполнения второй части меньше, чем время первой.