Кратко резюме:
(само моите мнения)
- за имейл адрес -
VARCHAR(255)
- за потребителско име -
VARCHAR(100)
илиVARCHAR(255)
- за id_username - използвайте
INT
(освен ако не планирате над 2 милиарда потребители във вашата система) - телефонни номера -
INT
илиVARCHAR
или може биCHAR
(в зависимост от това дали искате да съхранявате форматиране) - публикации -
TEXT
- датите -
DATE
илиDATETIME
(определено включва време за неща като публикации или имейли) - пари -
DECIMAL(11,2)
- разни – вижте по-долу
Що се отнася до използването на InnoDB, защото VARCHAR
се предполага, че е по-бърз, не бих се притеснявал за това или скоростта като цяло. Използвайте InnoDB, защото трябва да извършвате транзакции и/или искате да използвате ограничения на външния ключ (FK) за целостта на данните. Също така, InnoDB използва заключване на ниво ред, докато MyISAM използва само заключване на ниво таблица. Следователно InnoDB може да се справи с по-високи нива на едновременност по-добре от MyISAM. Използвайте MyISAM за използване на пълнотекстови индекси и за малко по-малко разходи.
По-важно за скоростта, отколкото за типа на двигателя:поставете индекси на колоните, в които трябва да търсите бързо. Винаги поставяйте индекси в колоните си ID/PK, като id_username, което споменах.
Повече подробности:
Ето един куп въпроси относно MySQL типовете данни и дизайна на базата данни (предупреждение, повече, отколкото сте поискали):
И няколко въпроса за това кога да използвате двигателя InnoDB:
Просто използвам tinyint
за почти всичко (сериозно).
Редактиране – Как да съхранявате „публикации:“
По-долу са някои връзки с повече подробности, но ето кратка версия. За да съхранявате „публикации“, имате нужда от място за дълъг текстов низ. CHAR
максималната дължина е 255, така че това не е опция и разбира се CHAR
ще загуби неизползваните знаци срещу VARCHAR
, което е с променлива дължина CHAR
.
Преди MySQL 5.0.3, VARCHAR
максималната дължина беше 255, така че ще останете с TEXT
. Въпреки това, в по-новите версии на MySQL можете да използвате VARCHAR
или TEXT
. Изборът се свежда до предпочитанията, но има няколко разлики. VARCHAR
и TEXT
максималната дължина вече е и двете 65 535, но можете да зададете своя собствена максимална на VARCHAR
. Да приемем, че смятате, че публикациите ви ще трябва да са само 2000 максимум, можете да зададете VARCHAR(2000)
. Ако всеки се сблъсквате с лимита, можете да ALTER
вие таблицата по-късно и го прехвърляте на VARCHAR(3000)
. От друга страна, TEXT
всъщност съхранява своите данни в BLOB
(1). Чувал съм, че може да има разлики в производителността между VARCHAR
и TEXT
, но не видях никакви доказателства, така че може да искате да разгледате това повече, но винаги можете да промените този незначителен детайл в бъдеще.
По-важното е, търсенето в тази колона "публикация" с помощта на пълен текстов индекс вместо LIKE
ще бъде много по-бързо (2). Въпреки това, трябва да използвате механизма MyISAM, за да използвате индекс на пълен текст, защото InnoDB не го поддържа . В база данни на MySQL можете да имате хетерогенен микс от машини за всяка таблица, така че просто ще трябва да накарате вашата таблица "публикации" да използва MyISAM. Ако обаче имате абсолютно нужда от „публикации“, за да използвате InnoDB (за транзакции), настройте тригер за актуализиране на MyISAM копието на вашата таблица „публикации“ и използвайте копието на MyISAM за всичките си търсения в пълен текст.
Вижте долната част за някои полезни цитати.
Накрая, ето страхотна публикация за плюсовете и минусите на VARCHAR срещу TEXT. Това също говори за проблема с производителността: