Elegir una clave primaria parece una decisión de nombres, pero también afecta a cómo la base de datos guarda y lee los datos. El orden de las claves nuevas cambia cuánto trabajo debe hacer el índice en cada inserción.
Cómo gestiona un índice las filas nuevas
La mayoría de las bases de datos guardan las claves primarias en un árbol B, una estructura ordenada almacenada en páginas. Cuando una clave nueva es mayor que todas las existentes, se añade al final de la última página, lo que es barato y mantiene las páginas llenas. Cuando las claves llegan en orden aleatorio, cada inserción cae en una página al azar. Las páginas se llenan y hay que dividirlas, los datos quedan dispersos y hace falta mantener más parte del índice en memoria para seguir siendo rápido.
El efecto de las claves aleatorias
Un identificador totalmente aleatorio como un UUID v4 se comporta como el segundo caso. En tablas pequeñas no lo notarás. En tablas con decenas de millones de filas, y sobre todo en motores que guardan la fila completa dentro del índice de la clave primaria, las divisiones de página extra, los índices más grandes y los fallos de caché pueden ralentizar notablemente las escrituras.
Identificadores ordenados por tiempo
Un ULID empieza con una marca de tiempo de 48 bits en milisegundos, seguida de 80 bits aleatorios, así que los valores nuevos suelen ser mayores que los antiguos. Las inserciones se añaden casi siempre al final del índice, como ocurriría con un número autoincremental, pero conservas la posibilidad de crear IDs en cualquier servidor de aplicación sin coordinación. UUID v7 sigue la misma idea con el formato UUID estándar.
Compromisos
- Los IDs creados en el mismo milisegundo se ordenan por su parte aleatoria, salvo que el generador use el modo monotónico.
- La marca de tiempo es visible en el ID, así que no lo uses donde la hora de creación deba seguir siendo privada.
- Ordenar por ID solo es aproximadamente cronológico entre máquinas con relojes distintos.
Preguntas frecuentes
¿Debo reemplazar mis claves UUID actuales? No, salvo que hayas medido un problema. Las migraciones son costosas y muchas aplicaciones nunca llegan a la escala en la que importa.
¿Puedo leer la hora de un ULID? Sí. El generador puede decodificar un ULID y devolver su marca de tiempo.

