LINUX.ORG.RU

MySQL, большая таблица


0

0

Решил проверить поведение MySQL () на большой таблице. Сама табличка простая - ключ (INT) и текстовое поле VARCHAR(50). Циклом создал 10.000.000 записей.

Делаю простейший запрос, вида

SELECT * FROM <таблица> LIMIT i, 50;

где i - подставляется. Наблюдаю за изменением времени обработки запроса. В начале таблицы (пока i маленькие) время обработки порядка 0.02 сек. На последних записях время доходит до 40 сек. Это лечится или уже даже просто не "полистаешь" такие объёмы?

★★★★★

Да, забыл написать. MySQL - 4.1.20.

atrus ★★★★★
() автор топика
Ответ на: комментарий от friday

> судя по описанию, проблема действительно в отсутствии индекса

А какой индекс нужен? У него "LIMIT x, 50"... Это значит, что будут просматриваться x+50 записей, и из них выбираться последние 50.

В MySQL при таком просмотре лучше бежать по таблице, чем по индексу. Когда бежишь по таблице, доступ к диску последовательный. А когда по индексу, оно будет тыкать то в индекс, то в таблицу

(Если ты хочешь чтобы оно сначала x записей пробежало по индексу, а потом за записями номер x+1...x+50 лазало в таблицу, то такое вроде не поддерживается)

gods-little-toy ★★★
()
Ответ на: комментарий от Pi

> а индекс по ключу создал

По какому? PRIMARY индекс есть. А по текстовому полю я пока отбирать не пробовал. Кстати, SELECT * FROM ... WHERE ID=чисто - работает шустро, даже если номер идшника из последних.

atrus ★★★★★
() автор топика
Ответ на: комментарий от roller

правильно же! как до меня раньше не допёрло!

мускул тормозит правильно, т.к. запрос сделан "чтоб тормозило"

Pi ★★★★★
()

Может в вашем случае больше подойдут курсоры (если MySQL их умеет)?

saper ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.