MySQL a rychlost enum vs. int

buddy

MySQL a rychlost enum vs. int
« kdy: 11. 04. 2011, 20:52:08 »
Ahoj,

pokud mám v databázi pouze hodnoty 0, 1 v daném sloupci a optimalizuji na rychlost, co je lepší?
varchar(1) anebo enum(0,1) ?

Co je rychlejší? Samozřejmě s indexem.

Díky.
« Poslední změna: 11. 04. 2011, 21:55:18 od Petr Krčmář »


Logik

  • *****
  • 1 031
    • Zobrazit profil
    • E-mail
Re: mysql enum vs int
« Odpověď #1 kdy: 11. 04. 2011, 21:10:34 »
Varchar rozhodně ne. ENUM a INT(1) bude imho stejně rychlé, respektive ENUM o maličkej drobek pomalejší. Enum se ukládá jako integer, takže něco malinko času zabere přeložit enum do integeru - nicméně pokud se nebude provozovat milióny dotazů s mizivým časem vykonání, tak to nebude poznat.

Sma mysql poskytuje typ boolean, kterej je synonymem pro TINYINT.

buddy

Re: mysql enum vs int
« Odpověď #2 kdy: 11. 04. 2011, 21:16:51 »
jasně, pardon, měl jsem na mysli int, ne varchar.
myslíš, že je lepší než int(1) boolean? resp. rychlejší?

Re: mysql enum vs int
« Odpověď #3 kdy: 11. 04. 2011, 21:27:37 »
Tinyint sa používa namiesto boolean štandardne. Neviem prečo, ale keď sa to používa štandardne, hádam niekto na svete to vie.
V dokumentácii som kdesi čítal, že pre úspornejší zápis boolean je možné použiť CHAR(0) - NULL namiesto false, prázdny string namiesto true :) zaberie to iba 1 bit. To len tak pre zaujímavosť, je to humus.

Logik

  • *****
  • 1 031
    • Zobrazit profil
    • E-mail
Re: mysql enum vs int
« Odpověď #4 kdy: 11. 04. 2011, 21:56:24 »
BOOLEAN a TINYINT je synonymum to bych neřešil... (Tzn. typ boolean defakto neexistuje, je to pouze alias pro TINYINT).

INT(1) zabere 4 byty, akorát se zobrazuje na jedno desetiný místo, tam jsem to napsal blbě, myslel jsem TINYINT, INT bych nepoužíval.

V každym případě to udělá minimální rozdíly - optimalizoval bych spíš strukturu databáze, aplikační logiku atd....
« Poslední změna: 11. 04. 2011, 22:10:00 od Logik »


Re: MySQL a rychlost enum vs. int
« Odpověď #5 kdy: 11. 04. 2011, 23:16:17 »
BIT(1)

Logik

  • *****
  • 1 031
    • Zobrazit profil
    • E-mail
Re: MySQL a rychlost enum vs. int
« Odpověď #6 kdy: 12. 04. 2011, 09:19:05 »
Hezkej výkřik. Ale zrovna pomocí bit(1) neušetříš ani místo - pokud těch položek není v záznamu více
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

- a hlavně to rozhodně nebude rychlejší, protože narozdíl od tinyint, kde při čtení se prostě přečte byte, tady musí mysql bit "rozbalit".