|
|
|
Проблема с limit n,m
|
|||
|---|---|---|---|
|
#18+
Есть простая таблица из 9 полей хранящая около полумиллиона записей. Есть поле время в формате datetime и flag enum (0,1). Задача: Вывести таблицу (cgi perl) где флаг=0 и отсортированную по времени. Запрос: SELECT time,blablabla,.... WHERE flag='0' ORDER BY time DESC LIMIT n,50; Где n - подсовывается cgi-шником и принимает значения 0,50,100,.... Короче таким образом реализуется листалка, чтоб не выплевывать пользователю все полмиллиона записей. Проблема: С увеличением n нереально возрастает время запроса. К примеру при n=0 время выполнения запроса = 0.03 сек, а при n=150000 возрастает до 12 сек. Понастроил индексов на все значимые поля, та же хрень. Можно это как-то побороть ? И вообще как работает limit ? Он че все равно втягивает всю таблицу целиком ? Рабочая нагрузка таблицы планируется около 5 млн записей. При таком объеме тормоза станут просто нереальными. Короче need help :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 13:26 |
|
||
|
Проблема с limit n,m
|
|||
|---|---|---|---|
|
#18+
Ну а как ты хотел?! Где гарантия, что ты не вствишь запись и по полю дата они окажутся не в конце, и не в начале, а где-то посередине?! Вот и выходит, что раз ты сортируешь по полю Дата, серверу приходится посмотреть все записи, оценить какая будет по счет N и N+50... Но странно, при вполне стандартном индекси по этим двум полям (flag и time) скорость подобного запроса должна быть вполне приемлемая! Недавно была подобная таблица с 180 млн. из нее n=2 000 000 выдало что-то около 1.5 секунды. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 17:54 |
|
||
|
Проблема с limit n,m
|
|||
|---|---|---|---|
|
#18+
У меня key_buffer_size примерно 8 метров. Мож дело в этом и надо памяти поболее выделять ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 19:24 |
|
||
|
Проблема с limit n,m
|
|||
|---|---|---|---|
|
#18+
GunJahУ меня key_buffer_size примерно 8 метров. Мож дело в этом и надо памяти поболее выделять ? а чего статус говорит про Key_blocks_used ? Индекс по (flag,datetime) /* кстати, есть такой? ;) */ для полуМ записей будет ровно 5MB, т.е. должен влезать, если больше ничего нет -- Dmitry ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 20:06 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=669&tid=1854479]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 203ms |
| total: | 480ms |

| 0 / 0 |
