Разликата наистина има значение само за MyISAM, другите машини за съхранение не се интересуват от разликата.РЕДАКТИРАНЕ: Много потребители коментираха, че InnoDB се интересува:връзка 1 от на пара , връзка 2 от Kaan .
С MyISAM с редове с фиксирана ширина има няколко предимства:
-
Без фрагментация на редове:Възможно е с редове с променлива ширина да получите единични редове, разделени на множество секции във файла с данни. Това може да увеличи търсенето на диск и да забави операциите. Възможно е да го дефрагментирате с OPTIMIZE TABLE, но това не винаги е практично.
-
Размер на указателя на файла с данни:В MyISAM има концепция за указател на файл с данни, който се използва, когато трябва да препраща към файла с данни. Например, това се използва в индекси, когато се отнасят до мястото, където редът действително присъства. При фиксирани размери на ширина този указател се основава на изместването на реда във файла (т.е. редовете са 1, 2, 3 независимо от техния размер). При променлива ширина указателят се основава на отместването на байта (т.е. редовете може да са 1, 57, 163). Резултатът е, че при големите таблици показалецът трябва да е по-голям, което след това добавя потенциално много повече допълнителни разходи към таблицата.
-
По-лесно за поправяне в случай на корупция. Тъй като всеки ред е с еднакъв размер, ако вашата MyISAM таблица се повреди, е много по-лесно да се поправи, така че ще загубите само данни, които всъщност са повредени. При променлива ширина на теория е възможно указателите с променлива ширина да се объркат, което може да доведе до лош начин на маркучване на данните.
Сега основният недостатък на фиксираната ширина е, че губи повече пространство. Например, трябва да използвате полета CHAR вместо полета VARCHAR, така че в крайна сметка ще получите допълнително заето място.
Обикновено няма да имате голям избор във формата, тъй като той се диктува въз основа на схемата. Въпреки това, може да си струва, ако имате само няколко varchar или един blob/текст, за да се опитате да оптимизирате за това. Например, помислете за превключване на единствения varchar в char или разделяне на blob в собствената му таблица.
Можете да прочетете още повече за това на:
http://dev.mysql.com/doc/refman /5.0/bg/static-format.html
http://dev.mysql.com/doc/refman /5.0/bg/dynamic-format.html