HEAP(MEMORY) таблицы, производительность...

Voyager2K

Новичок
HEAP(MEMORY) таблицы, производительность...

В теории, как должно быть, HEAP таблицы должны напорядок быстрее работать и обращения к ним то же. Вот только в каких случаях ?
Попробовал ради интереса сделал в базе двк таблицы : одну HEAP, другую MyISAM. В обе из них кинул порядка 50 000 записей. Таблшицы содержали поля int | varchar | varchar | datetime с одинаковыми занчения всех полей кроме id (int) с автоинкриментом.

Попробовал в цикле 100 - 1000 раз сделать один и тот же запрос аля SELECT * FROM table WHERE id > 100 для каждой базы. По времени разницы почти никакой не было... может в более сложных таблицах разница заметна. Однако сложные таблицы в MEMORY хранить бессмысленно... а копить для операция из обычных таблиц то же не смысла - выгоды по времени не получить.

Али я что не так понимаю ?
 

Voyager2K

Новичок
В любом случае 50 000 записей это примерно 10 мегов... если мерять по занимаемому объему файла sql-инструкций. При хранении самих таблиц это будет немногим большим. Оперативы на моем компе 512 - это не бог знает сколько, однако в среднем половина из нее всегда свободна в винде. Так что маловероятна нехватка памяти.
 

chira

Новичок
Апельсин

admin, HEAP таблицы никогда не создаются на диске. Только в памяти.
замечание верное, но не законченное
что будет если памяти не хватит?
может сложиться впечатление, что сказав HEAP, мы в любом случае получаем высокую производительность
 

Voyager2K

Новичок
Для этого и рекомендуется указывать конкретное количесвто максимальное записей в таких таблицах, дабы они все не сжирали. То бишь скорее всего невозможно, при переполнении памяти, будет производить туда еще запись.
 

Апельсин

Оранжевое создание
> что будет если памяти не хватит?

ты имеешь ввиду привышение переменной max_heap_table_size или физическую нехватку памяти? Если первое, то ошибка, если второе, то скорее всего тоже что и во всех остальных случаях когда MySQL запрашивает память и не может ее получить :) Но на диск эти таблицы не сбрасываются. Не путай их со временными таблицами, которые могут быть как in-memory так и disk-based.
 

Voyager2K

Новичок
Так что же касательно эффективности, может кто-то привести пример таблицы которая будет давать приличный прирост скорости в heap-таблицах ?
А то пока у меня складывается впечатление : нафих они ваще нунжны... если только нужна эти таблицы обнулять часто, а влом дропать таблицу.
 

Vladson

Сильнобухер
>>> на диск эти таблицы не сбрасываются
На винде сбрасываются, винда кидает их в своп и не спрашивает ни у кого разрешения (более того, хреново настроенная делает это даже когда нет нехватки памяти)
 

Апельсин

Оранжевое создание
Автор оригинала: Vladson
>>> на диск эти таблицы не сбрасываются
На винде сбрасываются, винда кидает их в своп и не спрашивает ни у кого разрешения (более того, хреново настроенная делает это даже когда нет нехватки памяти)
Vladson, я говорила о поведении MySQL. своп - это относится к ОС, а не к MySQL.
 

Vladson

Сильнобухер
Именно что MySQL делает как задумано, а ОС через ж... в смылсе как может...
 

Falc

Новичок
Voyager2K
>>SELECT * FROM table WHERE id > 100
Дело в том что время выполнения такого запроса в основном зависит от скорости передачи данных между базой и клиентом (php). Т.к после первого запроса даные из таблицы MyISAM окажутся в кеше операционной системы и обрашения к диску не будет.

Если же выполнить запрос вида:
SELECT COUNT(*) FROM table WHERE id > 100

То разница должна быть заметной.
 
Сверху