2012-02-21 26 views
30

Estoy tratando de averiguar si mi mesa obtendrá menos rendimiento si cambio la clave principal a BIGINT (20). Por el momento, estoy usando INT (7) y tengo aproximadamente 300,000 entradas ya con ID grandes (7 u 8 dígitos). Ya busqué mucho, pero solo descubrí que usa más espacio en el disco (lo cual es obvio).BIGINT rendimiento de mysql en comparación con INT

Todas mis identificaciones tienen 7 dígitos en este momento, pero mi cliente desea cambiar a 8 dígitos. No podré cambiar fácilmente el software en el futuro, así que pensé en usar BIGINT (20) ahora por las dudas. ¿Sería menos efectivo si uso BIGINT aunque todavía no lo necesite?

¿Alguien con experiencia haciendo esto tiene sugerencias con respecto a la velocidad y el rendimiento?

Respuesta

81

Para responder a su pregunta: sí obtendrá menos rendimiento. Obviamente, cuanto más grande sea el tipo, cuanto más grande sea la tabla, más lentas serán las consultas (más E/S, índices más grandes, mayor tiempo de acceso, menos probabilidades de que el resultado entre en las distintas memorias caché, etc.). Por lo tanto, como regla general: utilice siempre el tipo más pequeño que se adapte a sus necesidades.

Dicho esto, el rendimiento no importa. ¿Por qué? Porque cuando llegas a un punto donde desbordes un INT, entonces BIGINT es la única solución y tendrás que vivir con eso. También en ese momento (considerando que está usando un PK de incremento automático, tendrá más de 4 mil millones filas), tendrá mayores problemas de rendimiento, y la sobrecarga de BIGINT en comparación con un INT será la menor de tus preocupaciones.

lo tanto, considerar los siguientes puntos:

  • Uso UNSIGNED si no necesita valores negativos, que va a duplicar el límite.
  • UNSIGNED INT max value es 4.294.967.295. Si está utilizando un PK de incremento automático, y , solo tiene 300,000 entradas, realmente no necesita preocuparse. Incluso podría usar un MEDIUMINT en este momento, a menos que esté planeando un crecimiento realmente muy rápido. (Consulte http://dev.mysql.com/doc/refman/5.1/en/integer-types.html)
  • El número entre paréntesis después del tipo no afecta el valor máximo del tipo. INT (7) es lo mismo que INT (8) o INT (32). Se usa para indicar el ancho máximo de visualización. (Consulte http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html)
+3

Esto dice todo lo que estaba a punto de hacer. Prácticamente no tiene posibilidad de alcanzar el límite en un campo INT a menos que esté tratando con MUCHOS datos (que NO son 300,000 entradas). También como se menciona aquí, el (7) realmente no hace nada para limitar lo que almacena el campo. Todavía tiene un límite de 4.3 mil millones (suponiendo que lo haga SIN FIRMAR) –

+0

conozco los tamaños de int (7) y así sucesivamente. pero no uso el autoincremento en esa tabla, porque los números se importan desde otra base de datos, y son mucho más largos que 2 caracteres – rubo77

+0

leo http://dev.mysql.com/doc/refman/5.1/en/numeric -type-overview.html :) – rubo77

Cuestiones relacionadas