soporta segundo reconstruir por optimizar mostrar indice cuantas crear consultas con como archivo mysql database-design

segundo - optimizar consultas mysql explain



¿Qué sucede cuando se agota una columna de incremento automático? (3)

No sé acerca de MySQL, pero en el caso de Postgresql , puede especificar si la secuencia es un CICLO / NO CICLO. Si se crea con una opción CYCLE, regresará nuevamente a 1 (o al valor mínimo) y lanzará el error para la clave duplicada.

Considere una tabla simple con una columna de autoincremento como esta:

CREATE TABLE foo ( `fooid` bigint unsigned NOT NULL auto_increment, ....snipped.... other columns PRIMARY KEY (`fooid`) ) ENGINE=InnoDB AUTO_INCREMENT=10

¿Cómo se rediseña esto para que no lleguemos al máximo del tipo de datos bigint? El rango sin signo es 0 a 18446744073709551615. No sé cuánto tiempo llevará alcanzar 18446744073709551615, pero al igual que el problema del año 2000, quiero estar listo para ello.


Según el modo SQL que esté utilizando, MySQL hace una de estas dos cosas cuando el valor de una columna numérica AUTO_INCREMENT crece fuera del rango. Se obtiene un error en cualquier caso, pero por diferentes razones.

En modo estricto, MySQL rechaza el valor fuera de rango, arroja un error de valor no válido y el INSERT falla. En el modo no estricto predeterminado, MySQL reduce el valor al más alto permitido para el tipo de datos y realiza el INSERT . Pero INSERT falla porque el atributo AUTO_INCREMENT ha causado que todos los valores posibles se usen ya, y obtiene este error (ejemplo SMALLINT sin SMALLINT ):

MySQL said: #1062 - Duplicate entry ''65535'' for key 1

Para el ejemplo BIGINT aquí, reemplace el "65535" con 18 quintillones, aunque no es probable que este error haya ocurrido alguna vez en una base de datos de producción.

Pero con SMALLINT y SMALLINT s puede suceder muy fácilmente si subestima los posibles valores de clave (número de INSERT s) a lo largo de la vida de una aplicación. Imagine que está haciendo cambios en su código y prueba que sus datos se inserten correctamente. De repente, su aplicación deja de funcionar con el error anterior. Retira los cambios al código bueno conocido, pero el error no desaparecerá ... muy frustrante.


Supongamos que inserta una fila cada milisegundo.

18446744073709551615 milseconds = 18446744073709552 segundos = 307445734561826 minutos = 5124095576030 horas = 213503982335 días = 584942417 años

Entonces, no es realmente como el problema del año 2000

Podría insertar un millón de filas por milisegundo y seguir estando bien durante más de 500 años.

En otras palabras: no te preocupes por eso.