sql >> Databasteknik >  >> RDS >> Oracle

Vad ska jag använda istället för sekvens för att undvika luckor?

Huvudsyftet med sekvenser är att tillhandahålla en källa till garanterad unika identifierare. Dessa är tekniska nycklar och generellt sett borde deras faktiska värde vara irrelevant. Jag menar - behöver du ens visa mappnumret för användaren?

Om du är så besvärad använd NOCACHE. Det kommer att minimera luckorna du ser, och så länge du inte skapar mappar särskilt ofta kommer du inte att märka prestandaträffen från att inte cachelagra en handfull siffror. Du kan fortfarande få luckor om en transaktion rullas tillbaka eller misslyckas av någon annan anledning, men de bör vara sällsynta; om de inte är det har du större saker att oroa dig för än numreringen av dina mappar!

Andra sätt att generera en monotont inkrementerande serie är antingen besvärliga att implementera (triggar över kodkontrolltabeller) eller garanteras inte vara unika (med max(id)+1 i en trigger). Om du vill använda en kodkontrolltabell - det vill säga en tabell som specifikt spårar det senast tilldelade mapp-ID - bör du ta en titt vid ett tidigare svar jag skrev som ska hur man gör implementera en. Den enda fördelen med en kodkontrolltabell är att vi kan upprätthålla räkningar med en grupp. Så du kan ha en serie mapp-ID för varje användare och öka dem oberoende av varandra.



  1. Hur parallella planer startar – del 1

  2. varför jag misslyckas med att skapa den här tabellen på Android SQLite?

  3. InnoDB eller MyISAM - Varför inte båda?

  4. Är det möjligt att få listan med rader grupperade efter ett kolumnnamn i Mysql?