Нет эффекта от создания индекса в MySQL

B
На сайте с 23.10.2006
Offline
159
573

Занялся оптимизацией своего кода на повышение производительности и столкнулся с забавным явлением, которое не понимаю

Есть таблица из которой тянутся записи (размер таблицы 30МБ кол-во записей 30 000)

id || запись ||kategoriya

без создания индексов (только id как праймари) производительность по запросу выбрать 10 первых записей категории 5

SELECT * FROM data WHERE kategoriya=5 LIMIT 0, 10

localhost: 0,15 сек

server:0,005 сек (хз почему так быстро - может сервер гораздо круче чем мой комп)

(время усреднено, но порядок сохранен)

добавляем индекс к полю kategoriya и тот же запрос выдает следующие скорости выполнения

localhost: 0,007 сек (в приципе ожидаемо на 100%)

server:0,005 сек (по идеие должно было ускориться как минимум на порядок)

Подскажите:

Почему на сервере скрипт отрабатывает быстро даже без индексов, а также почему добавление индекса не повышает скорость выполнения.

PS.

Есть мысли что скорость не повышантся по причине что сервер просто физически не может выдавать ответ на запрос быстрее 0,005 сек. - типа время на инициирование всех соединений с БД, создание процесса и отдачи контента.

PPS.

Досихпор сомневаюсь насчет выбранного раздела - может нужно было в администрирование серверов?

N
На сайте с 06.05.2007
Offline
419
#1

сервер наверняка и другими задачами загружен. отсюда и случайные изменения.

30 мб данных это настолько мало, что он их в память считал при прошлых операциях.

сгенерируйте данных больше чем оперативной памяти и тогда уже что-то можно будет увидеть.

не забывайте ставить после select SQL_NO_CACHE.

для оценки скорости выполнения запроса служит статусная переменная last_query_cost. она показывает считывания с диска, даже если они на самом деле не произошли.

а в администирорвание не надо - у них на все одинаковые ответы : поставьте nginx и memcached.

Кнопка вызова админа ()
B
На сайте с 23.10.2006
Offline
159
#2

Все верно - без кэша все также тормазит как и на локалке :)

PS.

а я то все думал куда у меня постоянно вся память на VPSке девается - её всегда идет перерасход от выделенных гарантираванно.

Кирпич
На сайте с 23.06.2007
Offline
44
#3
bimcom:
Занялся оптимизацией своего кода на повышение производительности

Начните оптимизацию с того что перестаньте писать названия полей транслитом

Вечное лето - вечным врагам (с) Сантим
B
На сайте с 23.10.2006
Offline
159
#4
Кирпич:
Начните оптимизацию с того что перестаньте писать названия полей транслитом

Это разве сильно влияет на быстродействие? (уверен что если и влияет, то не больше 0.001%)

maxivanov
На сайте с 25.07.2006
Offline
58
#5

что-то мне кажется что у тебя очень малое количество уникальных значений kategoriya, значит индекс просто не используется. а вообще смотри EXPLAIN SELECT * FROM data WHERE kategoriya=5 LIMIT 0, 10 + читай http://www.mysql.ru/docs/man/EXPLAIN.html

Главное не в том что ты делаешь, а в том как ты это делаешь!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий