2008-10-17 13 views
6

Un amigo mío afirma que en una base de datos típica, usar (por ejemplo) nvarchar[256] dará un rendimiento marginalmente mejor que nvarchar[200] o nvarchar[250] debido a la granularidad de las asignaciones de página.¿Los campos de texto de longitud variable de la base de datos deben ser potencias de 2?

¿Hay algo de cierto en esto?

Gracias!

+0

Pregunta relacionada: http://stackoverflow.com/questions/214527/is-there-any-performance-reason-to-use-powers-of-two-for-field-sizes-in-my-data – CesarB

Respuesta

16

Esto no es cierto. Las tablas se asignan en el disco en 8k páginas. Cuando se lee una tabla del disco, toda la página se lee en una operación IO y se almacena en la memoria. Por lo tanto, la longitud de una columna no afectará la alineación de memoria en absoluto. De hecho, con los tipos de datos de longitud no variable, más corto es definitivamente mejor: una columna nchar (200) permitirá más filas por página que una columna nchar (256). Esto permite que se lean más filas por cada IO físico individual, que puede tener un dramático afectando el rendimiento de la base de datos.

5

En todo caso, es probablemente peor debido a la sobrecarga de asignación. Cuando asigna nvarchar (256) la base de datos probablemente incluya un par de bytes para la longitud, por lo que el requisito de almacenamiento puede ser realmente 258.

Hay tantos niveles de abstracción en juego aquí que no verá ningún ¡Benefíciese tratando de optimizar en la parte superior para algo que solo importa en la parte inferior, y usted puede empeorar las cosas!

+0

Al menos este es un nuevo intento de optimización prematura. Nunca había escuchado este en particular antes. – MusiGenesis

1

Me pregunto si el amigo tuyo de alguna manera llegó a su conclusión por su cuenta o si este fue un caso de propagación del mito.

Hay una gran presentación de Tom Kyte en "cosas que sabe" que prácticamente todo el mundo debe ver antes de hacer afirmaciones como la de arriba: Things you know

1

creo que de esta manera: Si nvarchar [256] se comporta mejor que nvarchar [200], ¿el DBMS no crearía un nvarchar [256] cuando solicite un nvarchar [200]? (Pero aún así hacer que se vea como nvarchar [200])

Los buenos DBMS tienen algunas optimizaciones extremadamente avanzadas. Estoy bastante seguro de que tienen todos los simples también.

Cuestiones relacionadas