Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Longitudes máximas de filas

Estas en el tema de Longitudes máximas de filas en el foro de Mysql en Foros del Web. Hola, sé que la pregunta que voy a hacer es probablemente muy básica, pero busqué por todos lados, muchos tutoriales y en ninguno vi que ...
  #1 (permalink)  
Antiguo 16/03/2009, 18:28
 
Fecha de Ingreso: diciembre-2007
Ubicación: Rosario
Mensajes: 65
Antigüedad: 16 años, 4 meses
Puntos: 2
Pregunta Longitudes máximas de filas

Hola, sé que la pregunta que voy a hacer es probablemente muy básica, pero busqué por todos lados, muchos tutoriales y en ninguno vi que lo dejen lo suficientemente claro.

La pregunta es, vieron cuando uno crea las tablas? En los campos se suele poner entre paréntesis la longitud máxima de la información del campo. Quisiera saber qué beneficios se tiene al elegir una longitud máxima, es decir si se produce algún tipo de ahorro, o es simplemente para poner un "límite" el cual podria ser puesto por PHP por ejemplo y cumpliría la misma funcion.

Muchas gracias

Luciano
  #2 (permalink)  
Antiguo 16/03/2009, 22:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Longitudes máximas de filas

Si tiene un valor de ahorro hacer uso de longitudes mas pequeñas.
Para bases de datos pequeñas no se nota mucho, pero si para guardar un telefono tienes un campo varchar(2000) y la tabla tiene 1 millon de registros, ocupará mucho mas espacio que el campo varchar(15) para un millon de registros.

Un saludo
  #3 (permalink)  
Antiguo 17/03/2009, 11:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Longitudes máximas de filas

El tema lo debes analizar en dos opticas:
- A nivel de la base de datos y el modelo de datos, debes establecer cuál es la longitud máxima que el dato usará. De nada sirve ponerle VARCHAR (500) a un campo que guardará el nombre de una persona. ¿Conoces muchas personas cuyo nombre tenga 500 letras de longiitud?
- También se debe considerar que antes que guardar el valor completo de algo repetitivo, como por ejemplo los nombres de cargos de una empresa, es mejor guardarlos en una tabla CARGOS y en la de empleados poner el código numérico del cargo... Que inclusive no debería ser un INTEGER (4 bytes), sino un SMALLINT (1 byte), considerando que es difícil que una empresa existan 2555 cargos de diferente nombre...
- Todas estas consideraciones afectan la performance de una BB.DD., porque cada registro es 1 x bytes de todos los campos. Si has declarado campos por valor de 4000 bytes, cada registro aumentará en 4 K el tamaño de la tabla, además de los índices definidos sobre ella. Imaginate eso en un registro de ventas, donde cada registro fuese un renglón de la factura. 100 facturas x 10 renglones x 4K... Alrededor de 4Mb por talonario.
- Además de eso, debes considerar que estarás trabajando en Web, por lo que los datos viajan por medio del protocolo TCP/IP, por lo cual, a medida que sea mayor la longitud de bytes transmitidos, mayor será la fragmentación de los datagramas en la red, y por lo tanto más lenta la transmisión. Esto más allá de lo rápida que son actualmente las redes de datos.
- Esto último es importante por el vicio de los usuarios de usar "SELECT * ..." en vez de determinar qué campos realmente van a usar, de modo que al final saturan la transmisión de datos con todo el contenido de la tabla, innecesariamente.

Sintetizando:
1. Averigua qué longitud máxima real tienen los datos que vas a guardar. No los hagas más grandes, y tampoco más chicos.
2. Usa inteligentemente los campos numéricos UNSIGNED . Si el valor no tendrá negativos, usalos UNSIGNED.
3. Normaliza las tablas lo más que puedas, ayudará a reducir el tamaño de los registros.
4. Verifica si los índices son realmente necesarios. Muchas veces se definen índices que carecen de utilidad y bajan la performance.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 17/03/2009, 17:47
 
Fecha de Ingreso: diciembre-2007
Ubicación: Rosario
Mensajes: 65
Antigüedad: 16 años, 4 meses
Puntos: 2
De acuerdo Respuesta: Longitudes máximas de filas

Gracias huesos52 y gracias gnzsoloyo por detallarlo tan bien.

Ahora, me surge otra pregunta, en los campos de texto supongo que el numero corresponde a la cant. de caracteres o bytes, pero en el caso de los campos en los que guardo numeros, ese valor son bytes tambien o es por ejemplo la cant de digitos o el numero maximo que se puede guardar?

Gracias de vuelta

Saludos
  #5 (permalink)  
Antiguo 17/03/2009, 18:10
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Longitudes máximas de filas

Cada tipo de dato tiene un espacio de almacenamiento diferente.

Mira este enlace.

http://dev.mysql.com/doc/refman/5.1/...uirements.html

Un saludo
  #6 (permalink)  
Antiguo 17/03/2009, 19:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Longitudes máximas de filas

En realidad el concepto de almacenamiento de números es distinto:
- Los decimales de tipo REAL o DOUBLE son en realidad FLOAT de base y mantisa, que MySQL almacena con 4 bytes u 8 bytes, según la especificacion que se haga. De cualquier forma son almacenados como binarios.
- En el caso de los números enteros, los mismos se guardan como bytes pero se interpretan como binarios, lo que significa que para un TINYINT se usa un byte, SMALLINT 2 bytes, MEDIUMINT 3 bytes, INTEGER se usan 4 Bytes, para un BIGINT 8 bytes. Esto quiere decir:
Unsigned:
TINYINT: 0 a 255
MEDIUMINT: 0 a 65.535
INTEGER: 0 a 16.777.215
BIGINT: 0 a 18.446.744.073.709.551.615

Signed:
TINYINT: -128 a +127
SMALLINT: -32.768 a +32.767
MEDIUMINT: -8.388.608 a +8.388.607
INT: -2.147.483.648 a +2.147.483.647
BIGINT: -9.223.372.036.854.775.808 a +9.223.372.036.854.775.807
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 18/03/2009, 13:25
 
Fecha de Ingreso: diciembre-2007
Ubicación: Rosario
Mensajes: 65
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Longitudes máximas de filas

Entonces por ejemplo si tengo una tabla de este estilo:

id -> nros del 0 al 99.999
nombre -> string max. 200 caracteres
descripcion -> texto max. 8000 caracteres

Qué tipos debería usar y acompañados de qué valores? Eso me aclararía todo un poco más

Les agradezco mucho su ayuda

Gracias

Luciano
  #8 (permalink)  
Antiguo 18/03/2009, 17:25
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Longitudes máximas de filas

id -> float
nombre -> varchar(200)
descripcion -> varchar(8000)

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:26.