Iver's web place

Navegador de Archivos

Calendario del Blog

February 2012
Sun Mon Tue Wed Thu Fri Sat
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 1 2 3

General

Los detalles hacen la diferencia

En casi todas las cosas que hacemos un simple detalle hace una gran diferencia, ejemplos:
  • Ponerse o no desodorante.
  • Poner o no poner una coma.
  • Ponerle o no ponerle .... el siguiente texto a una frase =D
  • Declarar una variable con un tipo de dato correcto

El caso de las bases de datos no es la excepción y en muchos casos suele traer graves consecuencias el no haber declarado una variable con el tipo de dato adecuado. Para ser más claro, si uno declara un campo de una tabla que será nvarchar en lugar de varchar, a simple vista esto no afecta porque ambos son de texto, ¿Pero que pasa si la tabla será de hechos? Osea que la tabla sea parte de un Data Warehouse y tenga miles de millones de registros y nosotros por simple weba/flojera/pereza/valemadrismo simplemente no tomamos en cuenta que tipo de dato declaramos ... y "adentro!". Después de unos meses nos damos cuenta que la tabla ocupa mucho espacio en disco.



Update: El contenido de este post aplica para SQL Server, los tipos de datos se emplean en la versión 2000, sin embargo el uso de VARCHAR(MAX) se incluye a partir de la version 2005 de SQL Server.

El problema no es solo un campo, el campo es uno de los problemas ya que cada campo está declarado como nvarchar(200). Tan solo hay que ver la diferencia entre varchar y nvarchar ... osea la "n" .. jaja >P. Veamos más a fondo el desmadre ocasionado:





Primero que nada quiero resaltar la finalidad de cada tipo de dato. El NVARCHAR tiene la finalidad de almacenar datos "unicode", estos datos son usados para multilenguaje y por tal motivo el espacio que almacena es doble al de varchar. Osea, si guardamos un carácter en un campo NVARCHAR usará el doble de espacio que si guardáramos el mismo caracter en un campo VARCHAR.


Un NVARCHAR es un campo -CHAR- de longitud VARiable uNicode (uNicode VARiable-length CHARacter string), como su nombre lo indica y que además puede tener un valor comprendido entre 1 y 4000. Mientras que un VARCHAR será de 1 a 8000 caracteres. Ambos pueden intentar usar el máximo de espacio para un tipo de datos como este empleando la declaración varchar(max) o nvarchar(max)



Para nvarchar(max) indica que el tamaño máximo de almacenamiento es 2^31-1 bytes. El tamaño de almacenamiento en bytes es dos veces el número de caracteres especificado + 2 bytes.


En varchar(max) aumenta hasta 2^31 el número máximo de caracteres que se pueden almacenar en este tipo de datos.



Es aquí donde tenemos los problemas con los detalles, si nosotros creamos una tabla con 24 campos y 20 de ellos son de texto, además le agregamos que declaramos cada campo con nvarchar(200). Cuando tenemos mil millones de registros. Como resultado tenemos espacio innecesario reservado en la base de datos (los 2 bytes por cada nvarchar).



20 * 200 * 1000 000 000 = Mucho espacio a lo wey!!



Luego entonces, por favor, seamos consientes de que lo que hacemos en un trabajo de este tipo tiene consecuencias a futuro y es nuestra responsabilidad hacerlo bien. Osea las mejores prácticas NO son un invento de weyes que no tenian tiempo, se hicieron para facilitar la vida, no para ejemplificar una utopia



En otras palabras... ya hay que hacer las cosas bien por favor y que se vea que realmente nos pagan por lo que hacemos.



Para saber más:

Trackback URI: http://es.iver.com.mx/index.php/trackback/164

#1 Re: Los detalles hacen la diferencia

linuxman, <E-Mail> / August 18, 7:24 am  
avatar

Solo te falta aclarar, ¿Se trata de MS SQL Server?

[ Responder (0) ]

#2 Re: Los detalles hacen la diferencia

Iván Jaimes, <E-Mail> / August 18, 7:34 am  
avatar

Ciertamente, gracias por la observación.

Actualizado ;-)!

[ Responder (0) ]

Dejar un comentario

Escribe el código Captcha que estás viendo

Fuentes XML de comentario: RSS | Atom

Estadísticas de visitantes

7
61
27327