2010-01-07 20 views
5

Recientemente, he estado pensando si vale la pena tener 1 tabla con quizás una gran cantidad de columnas NULL o si es mejor tener más tablas sin NULL. He oído que NULL no está almacenado en InnoDB, por lo que me preguntaba si hay algún inconveniente o problema con tener un montón de filas con muchos NULL. Siempre he escuchado que los NULL comunes son malos, pero nunca aprendí realmente por qué. Por cierto, esos serán NULLs en claves foráneas, si eso importa en absoluto.¿Cuál es el impacto de NULL en las tablas de MySQL? (InnoDB)

En una segunda duda, ¿hay algún problema de rendimiento cuando estoy usando INNER JOIN en columnas que tienen una gran cantidad de NULL? Por ejemplo, si tengo 4 claves externas, y voy a hacer 4 INGRESO INTERNO, pero lo más probable es que solo 1 de ellas no sea NULO, ¿afectará esto al rendimiento? Gracias

Respuesta

6

Ver:

NULL se indexan.

En InnoDB, puede reducir los requisitos de almacenamiento para su fila de datos mediante el uso de NULL.

+0

Hola Bill, gracias por tu respuesta. Me gustaría saber más sobre el impacto en el rendimiento de hacer INNER JOIN en columnas que tienen muchos NULL. ¿Es esto malo? – Clash

+1

No puedo citar ninguna medición cuantitativa, pero creo que cualquier diferencia de rendimiento sería insignificante. Definitivamente sería mejor que centras tu atención en las mejoras de rendimiento que dan mejor resultado, como el uso de 'EXPLAIN' y el almacenamiento en caché de manera inteligente. –

2

En el libro MySQL Alto Rendimiento: Optimización, copias de seguridad, replicación, y más por Baron Schwartz, Peter Zaitsev, Vadim Tkachenko, Jeremy Zawodny, Arjen Lentz, y Derek J. Balling, que dice columnas de tablas que permiten valores NULL dificultar que MySQL optimice las consultas que hacen referencia a las columnas con nulos. Y cuando una columna anulable está indexada, requiere un byte extra por entrada y puede hacer que un índice de tamaño fijo (como un índice en una sola columna de enteros) se convierta a uno de tamaño variable en MyISAM. Dicen que las columnas necesitan llevar un valor perdido, para usar 0 para enteros, un carácter especial o una cadena vacía en su lugar. Evite NULL y NOT NULL siempre que sea posible.

+0

mismo en el documento oficial de mysql. http://dev.mysql.com/doc/refman/5.5/en/data-size.html – navy

Cuestiones relacionadas