TL;DR:Strenge er nok det sikrere valg, og præstationsforskellen bør være ubetydelig. Heltal giver mening for enorme samlinger, hvor enumet skal indekseres. YMMV.
Sandt.
Dette er en vigtig fordel ved heltal efter min mening. Det kræver dog også, at du sørger for de tilknyttede værdier af enum
ikke ændre sig. Hvis du ødelægger det, vil du næsten helt sikkert skabe kaos , hvilket er en kæmpe ulempe.
Hvis du rent faktisk bruger en enum-datatype, er det sandsynligvis en slags heltal internt, så heltalet burde kræve mindre behandling. Uanset hvad, skulle denne overhead være ubetydelig.
Jeg gentager meget af det, der er blevet sagt, men måske hjælper det andre læsere. Opsummering:
- At blande enum-værdikortet skaber kaos. Forestil dig din
Declined
tilstande fortolkes pludselig somAccepted
, fordiDeclined
havde værdien '2' og nu er denAccepted
fordi du omarrangerede enummet og glemte at tildele værdier manuelt... (gyser ) - Strenge er mere udtryksfulde
- Heltal tager mindre plads. Diskplads betyder normalt ikke noget, men indeksplads vil æde RAM, hvilket er dyrt.
- Heltalsopdateringer ændrer ikke størrelsen på objektet. Strenge, hvis længden varierer meget, kan kræve en omfordeling. Strengpolstring og polstringsfaktor bør dog afhjælpe dette.
- Heltal kan være flag (endnu ikke til forespørgsel), se desværre SERVER-3518 )
- Heltal kan forespørges af
$gt
/$lt
så du effektivt kan implementere komplekse$or
forespørgsler, selvom det er et ret mystisk krav, og der er intet galt med$or
forespørgsler...