¿Qué debo hacer si me quedo sin claves primarias de incremento automático?

En este artículo, hablemos del problema de la clave principal de la tabla mysql.

Primero plantee dos preguntas:

Pregunta 1: ¿Se debe utilizar uuid o incrementar automáticamente la clave principal?

Pregunta 2: Si se agota la clave primaria de incremento automático, ¿cómo solucionarlo?

Entonces, ¿cómo responder a este tipo de preguntas?

Resolveremos los problemas anteriores en este artículo.

Pregunta 1: ¿Se debe utilizar uuid o incrementar automáticamente la clave principal?

Es mejor utilizar una clave primaria de incremento automático, principalmente por las siguientes dos razones:

1. Si la tabla usa una clave primaria de aumento automático, cada vez que se inserta un nuevo registro, el registro se agregará secuencialmente a la posición posterior del nodo de índice actual. Cuando una página está llena, se abrirá una nueva página automáticamente .
  2. Si usa una clave primaria no incremental (como uuid), dado que el valor de la clave primaria insertada cada vez es aproximadamente aleatorio, cada nuevo registro debe insertarse en una posición aleatoria en la página de índice. En este momento, MySQL es para insertar el nuevo registro. Mueva los datos a una ubicación adecuada, e incluso la página de destino puede haber sido escrita de nuevo en el disco y borrada de la caché. En este momento, debe volver a leerse desde el disco. Este agrega mucha sobrecarga. Al mismo tiempo, las operaciones frecuentes de movimiento y paginación causan índices. La fragmentación resultó en una estructura de índice que no era lo suficientemente compacta. Más tarde, OPTIMIZE TABLE tuvo que usarse para reconstruir la tabla y optimizar el llenado de la página.

Sin embargo, no es necesario utilizar claves primarias de incremento automático en todos los escenarios. En escenarios posibles, la clave primaria debe ser generada por sí misma, independientemente de la sobrecarga de rendimiento. Eso no es un problema.

Pregunta 2: Si se agota la clave primaria de incremento automático, ¿cómo solucionarlo?

En primer lugar, tenemos que entender que en mysql, el rango de int tipo entero es el siguiente:

img

Tomemos como ejemplo el tipo entero sin signo: el rango de almacenamiento es 0 ~ 4294967295, que es aproximadamente 4,3 mil millones. Hablemos de ello primero, una vez que la identificación de incremento automático alcanza el valor máximo, si los datos continúan insertándose en este momento, se informará una excepción de conflicto de clave principal como se muestra a continuación

//Duplicate entry '4294967295' for key 'PRIMARY'

La solución también es muy simple. Cambie el tipo Int a tipo BigInt. El alcance de BigInt es el siguiente:

img

Incluso si tiene 10,000 datos por segundo y se ejecuta durante 100 años, los datos en una sola tabla son solo 10000*24*3600*365*100=31536000000000

Este número está lejos del límite superior de BigInt, por lo que si establece el ID de incremento automático en el tipo BigInt, no tiene que considerar el problema de que el ID de incremento automático alcance el valor máximo.

En este momento, si responde: cambie el tipo de clave principal de incremento automático al tipo BigInt.

Luego, habrá más preguntas (hoyos) en el seguimiento: Por ejemplo, ¿cómo se modifica el tipo de datos de una columna en línea?

Entonces, ¿cuál es la respuesta profesional a la pregunta "Cómo solucionar si se agota la clave primaria de incremento automático"?
Usted responde: Nunca me he encontrado con este problema, porque la clave primaria de incremento automático generalmente usa el tipo int, y generalmente no alcanza el valor máximo, y la base de datos y la tabla se dividirán, por lo que nunca me he encontrado con este tipo de problema. .

La imagen proviene de Smoke with Lonely.

Supongo que te gusta

Origin blog.csdn.net/hello_cmy/article/details/112837432
Recomendado
Clasificación