сортировка и постраничный вывод

antenne

Новичок
сортировка и постраничный вывод

Есть таблица t1
Код:
+--------------+----------------------+------+-----+
| Field        | Type                 | Null | Key |
+--------------+----------------------+------+-----+
| so           | int(6) unsigned      | NO   | UNI |
| id           | int(6) unsigned      | NO   | PRI |
| dst          | tinyint(3) unsigned  | NO   | MUL |
| cty          | enum('Y','N')        | NO   | MUL |
| status       | enum('Off','On')     | NO   | MUL |
| .....        | .............        | NO   |     |
+--------------+----------------------+------+-----+
из этой таблицы нужно сделать постраничный вывод в браузер пользователю

запрос

SELECT * from t1
WHERE cond...
ORDER BY so LIMIT offset, 10

пока не попал в кэш, выполняется около 1 сек.
далее, оффсет увеличивается (спрашиваем следующие 10 результатов) - еще секунда

насколько я понимаю, сервер MySQL делает выборку, согласно условиям, затем сортирует результат (а это десятки тысяч записей) и выбирает из него 10 строк LIMIT'ом

explain сообщает о using where, using filesort

что можно придумать?
в идеале избавиться от постоянной сортировки..
 

voituk

прозревший
насколько я понимаю, сервер MySQL делает выборку, согласно условиям, затем сортирует результат (а это десятки тысяч записей) и выбирает из него 10 строк LIMIT'ом
Что-то мне подсказывает что это не так.
Привожу пример (только что сам попробовал):
Код:
mysql>select count(*) from <hidden_table>;
+----------+
| count(*) |
+----------+
| 91503133 |
+----------+
1 row in set (0.00 sec)

# Выборка по неключевому полю
mysql> select * from <hidden_table> where method='GET' ORDER BY id limit 1;
#bla-bla-bla
1 row in set (0.00 sec)

# Выборка по ключевому полю
mysql> select * from <hidden_table> where c_time='20060120' ORDER BY id limit 1;
#bla-bla-bla
1 row in set (0.00 sec)
Выборка на LIMIT 1000 уже работает от 5 до 10 минут
 

antenne

Новичок
Автор оригинала: voituk
Что-то мне подсказывает что это не так.
Привожу пример (только что сам попробовал):
...
Выборка на LIMIT 1000 уже работает от 5 до 10 минут
А select * from <hidden table> order by id limit 90000000, 1
?
 

FedY@

Новичок
не нравяться задержки, отрубай с помощью PHP на страницы :)
 
Сверху