Fórum Root.cz

Hlavní témata => Server => Téma založeno: buddy 11. 04. 2011, 20:52:08

Název: MySQL a rychlost enum vs. int
Přispěvatel: buddy 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.
Název: Re: mysql enum vs int
Přispěvatel: Logik 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.
Název: Re: mysql enum vs int
Přispěvatel: buddy 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ší?
Název: Re: mysql enum vs int
Přispěvatel: rooobertek 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.
Název: Re: mysql enum vs int
Přispěvatel: Logik 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....
Název: Re: MySQL a rychlost enum vs. int
Přispěvatel: Pavel Plzák 11. 04. 2011, 23:16:17
BIT(1)
Název: Re: MySQL a rychlost enum vs. int
Přispěvatel: Logik 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".