Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да изберем оптимизирани типове данни за колони [специфични за innodb]?

Кратко резюме:

(само моите мнения)

  1. за имейл адрес - VARCHAR(255)
  2. за потребителско име - VARCHAR(100) или VARCHAR(255)
  3. за id_username - използвайте INT (освен ако не планирате над 2 милиарда потребители във вашата система)
  4. телефонни номера - INT или VARCHAR или може би CHAR (в зависимост от това дали искате да съхранявате форматиране)
  5. публикации - TEXT
  6. датите - DATE или DATETIME (определено включва време за неща като публикации или имейли)
  7. пари - DECIMAL(11,2)
  8. разни – вижте по-долу

Що се отнася до използването на 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. Това също говори за проблема с производителността:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Вмъкнете запис, ако не съществува в таблицата

  2. Съхранение на JSON в база данни в сравнение с наличието на нова колона за всеки ключ

  3. Как да вмъкнете константа на PHP в SQL заявка?

  4. Примка на PDO и отпечатване на fetchAll

  5. Има ли Spring Batch 3 Upgrade Script за MySQL?