sql >> Databáze >  >> RDS >> Mysql

Jak vybrat optimalizované datové typy pro sloupce [specifické pro innodb]?

Stručné shrnutí:

(pouze moje názory)

  1. pro e-mailovou adresu - VARCHAR(255)
  2. pro uživatelské jméno - VARCHAR(100) nebo VARCHAR(255)
  3. pro id_username – použijte INT (pokud neplánujete více než 2 miliardy uživatelů ve vašem systému)
  4. telefonní čísla – INT nebo VARCHAR nebo možná CHAR (záleží na tom, zda chcete uložit formátování)
  5. příspěvky – TEXT
  6. data – DATE nebo DATETIME (určitě zahrňte časy pro věci, jako jsou příspěvky nebo e-maily)
  7. peníze – DECIMAL(11,2)
  8. různé – viz níže

Pokud jde o používání InnoDB, protože VARCHAR má být rychlejší, tím bych se netrápil, ani rychlostí obecně. Použijte InnoDB, protože potřebujete provádět transakce a/nebo chcete použít omezení cizího klíče (FK) pro integritu dat. InnoDB také používá zamykání na úrovni řádků, zatímco MyISAM používá pouze zamykání na úrovni tabulky. Proto InnoDB zvládne vyšší úrovně souběžnosti lépe než MyISAM. Použijte MyISAM k použití fulltextových indexů a s poněkud menší režií.

Důležitější pro rychlost než typ motoru:umístěte indexy do sloupců, ve kterých potřebujete rychle vyhledávat. Vždy uvádějte indexy do sloupců ID/PK, jako je id_username, které jsem zmínil.

Další podrobnosti:

Zde je spousta otázek o datových typech MySQL a návrhu databáze (varování, více, než jste požadovali):

A pár otázek, kdy použít engine InnoDB:

Používám pouze tinyint téměř za všechno (vážně).

Upravit – Jak ukládat „příspěvky:“

Níže je několik odkazů s podrobnostmi, ale zde je krátká verze. Pro ukládání „příspěvků“ potřebujete místo pro dlouhý textový řetězec. CHAR maximální délka je 255, takže to není možnost, a samozřejmě CHAR by plýtvalo nevyužitými znaky oproti VARCHAR , což je proměnná délka CHAR .

Před MySQL 5.0.3 VARCHAR maximální délka byla 255, takže by vám zůstal TEXT . V novějších verzích MySQL však můžete použít VARCHAR nebo TEXT . Výběr závisí na preferencích, ale existuje několik rozdílů. VARCHAR a TEXT maximální délka je nyní obě 65 535, ale můžete si nastavit vlastní maximální na VARCHAR . Řekněme, že si myslíte, že vaše příspěvky budou potřebovat maximálně 2000, můžete nastavit VARCHAR(2000) . Pokud každý narazíte na limit, můžete ALTER tabulku později a přesuňte ji na VARCHAR(3000) . Na druhé straně TEXT ve skutečnosti ukládá svá data do BLOB (1). Slyšel jsem, že mezi VARCHAR mohou být rozdíly ve výkonu a TEXT , ale neviděl jsem žádný důkaz, takže to možná budete chtít prozkoumat více, ale vždy můžete v budoucnu změnit tento malý detail.

Ještě důležitější je prohledat tento sloupec „příspěvek“ pomocí fulltextového indexu namísto LIKE bude mnohem rychlejší (2). Pro použití fulltextového indexu však musíte použít engine MyISAM, protože jej InnoDB nepodporuje . V databázi MySQL můžete mít pro každou tabulku heterogenní směs motorů, takže stačí, aby vaše tabulka „příspěvků“ používala MyISAM. Pokud však nezbytně potřebujete „příspěvky“ k použití InnoDB (pro transakce), nastavte spouštěč pro aktualizaci kopie MyISAM vaší tabulky „příspěvků“ a použijte kopii MyISAM pro všechna vaše fulltextová vyhledávání.

Některé užitečné citace naleznete níže.

Nakonec je zde skvělý příspěvek o výhodách a nevýhodách VARCHAR versus TEXT. Také hovoří o problému výkonu:



  1. Nejlepší postupy zabezpečení PostgreSQL

  2. Jak obnovit důvěru v omezení cizího klíče v SQL Server (příklady T-SQL)

  3. Použití stripslashes po mysql_real_escape_string

  4. Jak povolit rozšíření mysql php v kontejneru docker?