TL;DR:Strängar är förmodligen säkrare val och prestandaskillnaden bör vara försumbar. Heltal är meningsfullt för stora samlingar där enumen måste indexeras. YMMV.
Sant.
Detta är en viktig fördel med heltal enligt min mening. Men det kräver också att du kontrollerar de associerade värdena för enum
ändra inte. Om du förstör det, kommer du nästan säkert att orsaka förödelse , vilket är en stor nackdel.
Om du faktiskt använder en enum-datatyp är det förmodligen något slags heltal internt, så heltalet borde kräva mindre bearbetning. I vilket fall som helst bör den omkostnaden vara försumbar.
Jag upprepar mycket av det som har sagts, men det kanske hjälper andra läsare. Sammanfattning:
- Att blanda ihop enumvärdeskartan skapar förödelse. Föreställ dig din
Declined
tillstånd tolkas plötsligt somAccepted
, eftersomDeclined
hade värdet '2' och nu är detAccepted
eftersom du ordnade om listan och glömde att tilldela värden manuellt... (ryser ) - Strängar är mer uttrycksfulla
- Heltal tar mindre plats. Diskutrymme spelar vanligtvis ingen roll, men indexutrymme äter RAM vilket är dyrt.
- Heltalsuppdateringar ändrar inte storleken på objektet. Strängar, om deras längder varierar mycket, kan kräva en omfördelning. Strängstoppning och stoppningsfaktor bör dock lindra detta.
- Heltal kan vara flaggor (ännu inte sökbara (ännu), tyvärr, se SERVER-3518 )
- Heltal kan frågas av
$gt
/$lt
så att du effektivt kan implementera komplexa$or
frågor, även om det är ett ganska svårbegripligt krav och det är inget fel med$or
frågor...