Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > InnoDB движок


Автор: CrackedMind 4.3.2006, 22:20
При использовании InnoDB "движка" появились некоторые вопросы...
Удаляю я все записи из таблицы, размер файла данных таблицы остается прежним, уменьшить его размеры помогают либо ALTER TABLE либо OPTIMIZE TABLE? Почему такое происходит?

Автор: Kesh 4.3.2006, 22:37
CrackedMind, потому что при этих командах происходит перезапись структуры файла... Соответственно переписывается и сам файл полностью... Попробуй еще TRUNCATE - по идее тоже должен изменять... Все остальные команды инициируют записи в свободное место в файле... Это аналогично занятому месту на жестком диске... Т.е. есть некоторый объем, в который записываются данные, они записываются не последовательно, а в свободное место по всему файлу... Даже так..
Удаленные записи физически не уничтожаются, просто стираются ссылки на них... А новые записи добавляются в конец...

Если слишком сумбурно рассказал - пиши, попробую поподробнее...

Автор: CrackedMind 4.3.2006, 23:00
ну ведь для MyISAM при DELETE запись физически удаляется, я знаю что при DELETE записи помечаются как удаленные и нужно делать commit; (вроде так smile)
Код

mysql> delete from main;
Query OK, 68973 rows affected (4.75 sec)

mysql> truncate main;
Query OK, 67444 rows affected (0.16 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)


файлик как был 18 мб так и остался Ж), повторюсь для MyISAM все нормально физически удаляется

з.ы. версия MySQL == 5.0.16-nt

Автор: Kesh 5.3.2006, 00:00
CrackedMind, для InnoDB записи физически не удаляются... Как ты правиль и сказал
Цитата(CrackedMind @ 4.3.2006, 23:00 Найти цитируемый пост)
я знаю что при DELETE записи помечаются как удаленные
Только из самого файла они не стираются... Как с файловой системой... Ты файл удаляешь, он не стирается с диска, но и тебе уже не виден...

Автор: CrackedMind 5.3.2006, 00:33
так почему для InnoDB не удаляются, а для MyISAM удаляются? Какая то особенность?


Автор: Kesh 5.3.2006, 16:22
CrackedMind, угу... Работают по разному... InnoDB поддерживает транзакции... Кстати, у Oracle тоже в одном файле хранится вся информация, и размер файла тоже не меняется, пока его не забьешь...
Добавлено @ 16:25
Вот здесь описание MyISAM http://www.mysql.ru/docs/man/MyISAM.html
А здесь - InnoDB http://www.mysql.ru/docs/man/InnoDB.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)