Что работает быстрее: большая (в Мбайтах) база с char или маленькая с tynitext?

grey109

Новичок
Что работает быстрее: большая (в Мбайтах) база с char или маленькая с tynitext?

Есть база в кодировке cp1251. В базе несколько таблиц с полями типа char. Сейчас база занимает ~60 Мб. Размер базы постоянно увеличивается.

Сейчас на сайте сменили кодировку на uft8, соответственно сменили и кодировку базы. База распухла до ~150Мб.

Подскажите, пожалуйста, как лучше сделать: оставить базу как есть или сменить тип полей на tynitext? Везде написано, что char очень быстрый, но будет ли выигрыш в скорости, если много времени будет уходить чтение данных? Или лучше пусть будет компактная по размерам база, но с не очень быстрым типом tynitext?
 

vovanium

Новичок
grey109
хм, а что проблема протестировать? врятли кто-то даст четкий ответ, что лучше будет в твоем случае.
 

grey109

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

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

ALTER TABLE `test` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Была база 25Мб (cp1251), стала - 160 (utf8).
Делаю дамп Sypex'ом - размер ~25Мб.

Меняю, например, тип одного поля char(100) на tynitext и потом обратно. Размер базы уменьшается до примерно тех же 25 Мб.

Что самое интересно, иногда, чтобы размер уменьшился, нужно сменить тип(char<->tynitext) несколько раз у разных полей, иного достаточно одного поля. Что за мистика?

Mysql 5.0.67
 

Фанат

oncle terrible
Команда форума
с чего ты взял, что должна меняться в 2 раза?
ты вообще понимаешь, чем именно отличается поле char от tynitext, экспериментатор?
 

grey109

Новичок
с чего ты взял, что должна меняться в 2 раза?
С того, что символы отличные от английского алфавита занимают 2 байта, а не 1.

ты вообще понимаешь, чем именно отличается поле char от tynitext
Конечно. Только я не могу понять почему базу разносит при смене кодировки и она снова принимает нормальные размеры после одно- или многократного изменения типа поля.
 

grey109

Новичок
Хорошо. Т.к. кроме тебя никто пока не дал ответа на мой вопрос, может поделишься знаниями со мной и остальной аудиторией форума, и скажешь в чем причина такого поведения mysql?
 

yniker

Новичок
Автор оригинала: grey109
С того, что символы отличные от английского алфавита занимают 2 байта, а не 1.
utf8 это не widestring, и не все символы занимают там два байта некоторые 1 (например англ.), а некоторые и больше 2 двух.
 

grey109

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

grey109

Новичок
Делал уже - не помогло.

Пока решел проблему так: сделал дамп из базы в 160Мб, получил файл размером 25Мб, сделал импорт обратно его в базу. База стала нормальных размеров (~25Мб).
 

Фанат

oncle terrible
Команда форума
Да вообще база какая-то глюкавая.
В первом посте была 60 метров, а к последнему похудела до 25.
Я думаю, это форум пхпклуба на нее так влияет

-~{}~ 25.10.09 11:21:

Но больше всего радует упоминание размера ДАМПА во всех этих страданиях юного вертера. Размер дампа оно равнивает с размером базы. в которой тип поля char. Убица веником.
 

grey109

Новичок
-~{}~ 25.10.09 12:40:

Напиши здесь, чем, по-твоему, они отличаются
char(n) - постоянная длина строки. Строки длиной короче n добиваются пробелами.

tynitext - динамическая длина.


В первом посте была 60 метров, а к последнему похудела до 25.
В первом и последующих постах идет речь о разных базах, но сути это не меняет.


*****, ты можешь ответить по теме? Почему после конвертации базы, ее файлы стали занимать в разы больше месте? Не файл ДАМПа, а именно файлы БД.
 

Фанат

oncle terrible
Команда форума
Могу. символы, отличные от английского алфавита занимают 2 байта, а не 1
 

Фанат

oncle terrible
Команда форума
И ЧО? ПРИ ЧЕМ ЗДЕСЬ СИМВОЛЫ, КОТРЫЕ В БАЗЕ?!
Вернись на сообщение назад и попробуй воткнуть в собственные же слова, про что поле типа char.

-~{}~ 25.10.09 13:00:

С того, что символы отличные от английского алфавита занимают 2 байта, а не 1.
здесь, кстати, ошибочка
 
Сверху