Fórum Root.cz
Hlavní témata => Server => Téma založeno: 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.
-
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.
-
jasně, pardon, měl jsem na mysli int, ne varchar.
myslíš, že je lepší než int(1) boolean? resp. rychlejší?
-
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.
-
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....
-
BIT(1)
-
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".