Jeg er stødt på netop dette problem i mit professionelle liv. Vi brugte tidsstempel + tilfældigt tal og løb ind i alvorlige problemer, da vores applikationer blev skaleret op (flere klienter, flere servere, flere anmodninger). Indrømmet, vi brugte (dumt) kun 4 cifre og ændrede derefter til 6, men du ville blive overrasket over, hvor ofte fejlene stadig sker.
Over en lang nok periode er du garanteret for at få duplikerede nøglefejl. Vores applikation er missionskritisk, og derfor var selv den mindste chance for, at den kunne mislykkes på grund af iboende tilfældig adfærd, uacceptabel. Vi begyndte at bruge UUID'er for at undgå dette problem og styrede deres oprettelse omhyggeligt.
Ved at bruge UUID'er vil din indeksstørrelse stige, og et større indeks vil resultere i dårligere ydeevne (måske umærkelig, men alligevel dårligere). Men MySQL understøtter en native UUID-type (brug aldrig varchar som en primær nøgle!!), og kan håndtere indeksering, søgning osv. temmelig effektivt selv sammenlignet med bigint. Det største præstationshit til dit indeks er næsten altid antallet af rækker, der indekseres, snarere end størrelsen af det element, der indekseres (medmindre du vil indeksere på en lang tekst eller noget latterligt i den stil).
For at besvare dit spørgsmål:Bigint (med tilfældige tal vedhæftet) vil være ok, hvis du ikke planlægger at skalere din applikation/tjeneste væsentligt. Hvis din kode kan håndtere ændringen uden store ændringer, og din applikation ikke eksploderer, hvis der opstår en dubletnøglefejl, så gå med den. Ellers skal du bide i det og gå efter den mere omfattende mulighed.
Du kan altid implementere en større ændring senere, som at skifte til en helt anden backend (som vi nu står over for... :P)