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

Optimizar base de datos tinyint 1 o int 1

Estas en el tema de Optimizar base de datos tinyint 1 o int 1 en el foro de Mysql en Foros del Web. Hola a todos espero que esten bien y que hayan empezado el año excelentemente Mi pregunta es, que es mas optimo, un campo tinyint(1) ó ...
  #1 (permalink)  
Antiguo 06/01/2013, 14:37
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Optimizar base de datos tinyint 1 o int 1

Hola a todos espero que esten bien y que hayan empezado el año excelentemente

Mi pregunta es, que es mas optimo, un campo tinyint(1) ó un campo int(1), yo supongo que tinyint(1) será mas optimo no?
__________________
la la la
  #2 (permalink)  
Antiguo 06/01/2013, 14:42
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: Optimizar base de datos tinyint 1 o int 1

Lo más optimo es el campo más adecuado en función del dato que almacenarás.
Yo supongo que tu pregunta apunta a ese "(1)" que escribes, pero eso no tiene ninguna relevancia, porque no representa la cantidad de dígitos del numero en cuestión. Se usa para otra cosa.
Un TINYINT tiene 1 Byte, y un INT 4 Bytes. Siempre.

MySQL::11.2: Tipos de columna numéricos
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/01/2013, 14:50
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Optimizar base de datos tinyint 1 o int 1

Ah ok entonces en el phpMyAdmin en el campo Longitud/Valores si pongo un 1 o un 11 será lo mismo?
no importa lo que ponga siempre usará 1 Byte y 4 Bytee respectivamente ???
__________________
la la la
  #4 (permalink)  
Antiguo 06/01/2013, 17:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Optimizar base de datos tinyint 1 o int 1

respecto al tamaño ocupado, sí, pero mira esto que dice en el manual
Cita:
MySQL soporta otra extensión para especificar de forma óptima el ancho a mostrar de un tipo entero en paréntesis después de la palabra clave para el tipo (por ejemplo, INT(4)). Esta especificación opcional del ancho de muestra se usa para alinear a la izquierda la muestra de los valores con ancho menor que el ancho especificado para la columna.

El ancho de muestra no restringe el rango de valores que pueden almacenarse en la columna, no el número de dígitos que se muestran para valores con ancho que exceda el especificado para la columna.

Cuando se usa en conjunción con el atributo de extensión opcional ZEROFILL, el relleno por defecto de espacios se replaza por ceros. Por ejmplo, para una columna declarada como INT(5) ZEROFILL, un valor de 4 se muestra como 00004. Tenga en cuenta que si almacena valores mayores que el ancho de muestra en una columna entera, puede tener problemas cuando MySQL genera tablas temporales para algunos joins complicados, ya que en estos casos MySQL cree que los datos encajan en el ancho original de la columna.
Tienes que usar el tipo de campo apropiado, es decir, el que cubre todas las necesidades de los valores que vas a usar, pero no más, y con el atributo de ancho de muestra apropiado para mostrar bien los datos y no tener problemas con los joins. Y piensa el sinsentido que es poner un ancho de muestra de 11 dígitos para un TINYINT que sólo puede tener 3 dígitos como máximo, o el peligro de poner un ancho de muestra 1 para un INT que cubrirá hasta 3 dígitos, por poner un ejemplo, cuando tengas que relacionarlo como PK o FK con otro campo numérico que tenga un ancho de muestra diferente.
Un TINYINT(1) sería por ejemplo óptimo para marcar sí o no con 0 / 1, un sólo digito de ancho de muestra, pero podrías escribir y guardar hasta 3 dígitos, si bien, en ese caso, podrías tener problemas en las salidas tabuladas y con algunos joins. Si tu rango numérico va a tener más dígitos, podrás usar SMALLINT, MEDIUMINT, INT o BIGINT, pero el uso óptimo dependerá del mayor ahorro de espacio sin comprometer el rango de valores de tus datos y teniendo en cuenta el ancho de muestra para mostrar los datos y relacionar esos números. Para el rango de números, te bastará con consultar los cuadros.
Un ejemplo de lo último, cuando relacionas PK con FK y ambos son INT, pero el ancho de muestra es distinto (por ej. uno INT(4) y otro INT(5), y también si son de distinto tipo, claro), no podrás establecer las relaciones con InnoDB entre esos campos. De modo que ten cuidado con añadir ese ancho al tuntún.
Un consejillo: usar el atributo UNSIGNED puede permitirte almacenar hasta un número mayor (el doble que si no lo añades), si tu rango no tiene negativos, y eso con un tipo de campo numérico que ocupa menos espacio.
Pero no seas demasiado "avaricioso" con el espacio no usado, y lo mantengas al límite, sin haber previsto bien si los números pueden ser mayores más adelante. La expresión "más vale que sobre que no que falte", aquí podría suscribirse con mas vale que sobre (algo) que no que falte. Piensa siempre en el peor de los escenarios, aquel en el que podrías necesitar más espacio para los posibles datos que tuvieras que almacenar en esos campos en el futuro

Última edición por jurena; 07/01/2013 a las 09:33
  #5 (permalink)  
Antiguo 06/01/2013, 17:29
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Optimizar base de datos tinyint 1 o int 1

Gracias, Justamente estoy usando TINYINT (1) para almacenar 1 ó 0 .
__________________
la la la

Etiquetas: int, campos
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 19:54.