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

Optimizar Una Tabla SQL

Estas en el tema de Optimizar Una Tabla SQL en el foro de Bases de Datos General en Foros del Web. Hola a Todos, os pongo un ejemplo de una tabla con los siguientes campos y en cada campo lo que voy a ir guardando. - ...
  #1 (permalink)  
Antiguo 16/09/2004, 17:37
 
Fecha de Ingreso: septiembre-2003
Mensajes: 49
Antigüedad: 20 años, 7 meses
Puntos: 0
Optimizar Una Tabla SQL

Hola a Todos, os pongo un ejemplo de una tabla con los siguientes campos y en cada campo lo que voy a ir guardando.

- id :::: es un numero y como maximo llegara a tener 6 caracteres (autoincremento)
- Nombre ::: es una texto, he mirado y el maximo numero de caracteres seria 100
- direc :::: otro campo de texto, como maximo 150
- dimen :: es del tipo 2222 x 2222 siendo como maximo un numero de 4 cifras el por X y otro numero de 4 cifras (maximo 11 caracteres)
- Kbyte :::: es un numero como maximo va a ser 9999 pero puede tener decimales, exactamente 2 ejemplo 1254.23
- porup ::: es texto y maximo 20 caracteres
- fecha ::: una fecha en este formato 27-11-03 (no es necesario ordenar por fecha, porque ya ordeno por Uid descendiente (puede un campo de texto con 8 caracteres como maximo)
- hora :: es en este formato 22:15:36 como maximo 8 caracteres y lo mismo podria ser tb en formato de texto
- hits, votos, total, nota , serian numero que si me interesarian que se pudieran ordenar de mayor a menor, pero el campo nota, puede tener decimales como maximo seria 10 o 9.99 y los otros podrian ser como maximo 9999

La pregunta es que tipo de campo debe de ser cada uno ... esto estaria bien ?¿

id int(6) NOT NULL auto_increment
nombre varchar(100)
direc varchar(150)
dimen varchar(11)
kbybte varchar(7)
porup varchar(20)
dia varchar(8)
hora varchar(8)
hits int(6)
votos int(6)
total int(6)
nota int(6)

Ahora os explico un poco mas el caso, es una web donde a lo mejor hay en un instante 5 personas llamando a la base de datos .. eso quiere decir que menos de 3 minutos han hecho click en la web unas 150 personas. Imaginemos que uno hace una busqueda claro esta busca en esa tabla de esta manera

select id, nombre from TABLA where (nombre like '%$busqueda%') order by nombre

o si yo tuviera una tabla solamente con dos campos ID y Nombre y la consulta fuera igual ..

Me han comentado que el que yo solo seleciones el id y el nombre el servidor realmente lee todas las filas pudiendo de esta manera relentizar en conclusion la web (que es ese el problema que tengo realmente, que hora punta se queda un poco pillada).

Bueno eso es todo ... siento que el post sea un poco largo, pero queria explicarlo bien

SAludoss

Última edición por VerderoL; 16/09/2004 a las 17:39
  #2 (permalink)  
Antiguo 17/09/2004, 02:22
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Yo haría unas pocas correcciones, si bien alguna puede depender del uso que le vayas a dar al campo, no sólo su definición:
kbyte: si quieres hacer después operaciones numéricas en la base de datos te puede ser mejor ponerlo como "float(7,2)"
dia - hora: para después poder hacer operaciones con ellos es mejor meterlo como un único campo datetime y le das formato de salida en el programa. Si los quieres por separado puedes poner el día como date y la hora como tipo time.
Hits: te llegaría con un smallint (posiblemente unsigned para ir de 0 a 65535)
Nota: si va a contener decimles, defínelo como float (3,2)

En cuanto a que el servidor lee todas las filas no es del todo cierto: si haces búsquedas utilizando índices (poniendo condiciones sobre campos que forman parte de un índice), sólo tomará aquellas filas que cumplen la condición. La lectura de todos los registros de la tabla, la realizará cuando se vea oblidado a realizar una búsqueda secuencial, lo cual sucede cuando no es capaz de utilizar ningún índice para realizar dicha búsqueda.
Un saludo.
  #3 (permalink)  
Antiguo 17/09/2004, 18:38
 
Fecha de Ingreso: septiembre-2003
Mensajes: 49
Antigüedad: 20 años, 7 meses
Puntos: 0
Gracias Vice .. voy a hacer esos cambios que me recomiendas y veremos en hora punta como aguanta.

Saludos
El VerderoL
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 08:17.