2011-11-05 10 views
7

Desde el último código fuente (no estoy seguro si es C o C++) de MySQL, ¿cómo funciona una autoincrementación? Quiero decir, ¿es eficiente porque se almacena como un recurso de metadatos en la mesa donde se dejó por última vez, o tiene que hacer un escaneo de tabla para encontrar el ID más grande en uso en la tabla? Además, ¿ves algún aspecto negativo del uso de la autoincrementación cuando observas cómo se implementa frente a, por ejemplo, PostgreSQL?MySQL, C++: mediante programación, ¿cómo funciona MySinc Autoincrement?

+0

¿Qué motor estás usando? (por ejemplo, InnoDB) –

Respuesta

2

Eso dependerá de qué motor está utilizando la base de datos. InnoDB almacena el valor más grande en la memoria y no en el disco. Muy eficiente. Supongo que la mayoría de los motores harían algo similar, pero no pueden garantizarlo.

InnoDB's Auto Increment va a ejecutar la consulta a continuación una vez cuando se carga DB y almacenar la variable en la memoria:

SELECT MAX(ai_col) FROM t FOR UPDATE; 

Comparando eso a PostgreSQL 's completa falta de un AUTO_INCREMENT depende de cómo se llevaría a cabo el campo tú mismo. (Al menos le faltaba la última vez que lo usé. Pueden haber cambiado) La mayoría crearía un SEQUENCE. Que parece estar almacenado en una pseudo-tabla en memoria. Yo tomaría InnoDBs para ser una mejor manera simple. Supongo que InnoDB sería más eficiente si no son iguales.

+0

Está bien, entonces creo que lo leí con InnoDB, cuando se carga la base de datos, busca la última secuencia y luego la almacena en la memoria virtual como parte de los metadatos de la tabla. Gracias. – Volomike

Cuestiones relacionadas