SQL - optimizacion de una tabla de mysql

 
Vista:

optimizacion de una tabla de mysql

Publicado por sam (13 intervenciones) el 24/11/2012 12:37:08
Hola buenas tengo una duda.

En una base de datos mysql, si tiene muchas columnas una tabla ¿ podría ir mas lenta ha la hora por ejemplo de realizar búsquedas ?

Me refiero si por ejemplo la tabla en cuestión tiene para cada usuario registrado muchos campos para cada usuario como nombre, apellidos, aficiones, estudios, deportes bla bla bla etc, si tuviera muchos campos , si ralentiza un búsqueda llegado el momento, al tener muchos usuarios registrados.


De ser así, que fuera mas lenta la tabla al tener muchos campos, ¿hiría mas rapida dicha tabla si estubiera dividida la tabla , en dos tablas unidas por una clave ajena?

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

optimizacion de una tabla de mysql

Publicado por Ignacio Esviza (5 intervenciones) el 24/11/2012 12:45:42
Hola.

A priori, la búsquedas no son más lentas por la cantidad de columnas que tenga la tabla. Todo depende cómo armes la búsqueda. No es tanto el problema la tabla en sí, sino cómo hacés la búsqueda.

Si en cada query hacés SELECT * ... ese asterisco que significa "tráigame todas las columnas para cada registro que le pido". Entonces sí el servidor necesita preparar mucha más información y enviártela por TCP/IP y ahí sí va a ser más lento, pero si vos hacés "SELECT a,b,c" de aquellas columnas que te interesen en determinado momento (y no todas en todo momento) sería una forma de optimizar las ocnsultas y el efecto final es lo mismo que tener tablas separadas.

Luego, el tema de los índices que debés tener en cuenta para optimizar consultas.

Pero en conclusión: la cantidad de columnas de una tabla, en sí misma, no implica necesariamente que las consultas vayan más lento por eso.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

optimizacion de una tabla de mysql

Publicado por sam (13 intervenciones) el 24/11/2012 12:53:11
Entiendo lo que me dices.

Si el select de la busqueda es con * es mayor el rango de busquedas que tiene que mostrar y por eso iria " mas lento dentro de la rapidez ".

Pero... si el select * lleva ademas al final un "where id = '$id_usuario'", es decir esto estrecharia la busqueda a menos resultados y en consecuencia y iria mas rapido ¿no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

optimizacion de una tabla de mysql

Publicado por Ignacio Esviza (5 intervenciones) el 24/11/2012 13:12:31
Si, va por ahí.

Tené en cuenta que cuando hacés un SELECT estás pidiendo finalmente una grilla que tiene columnas y filas. Es decir una dimensión horizontal (columnas) y una dimensión vertical (filas). Dependiendo de cuán grandes sean las dimensiones que vos requerís el tiempo de procesar la búsqueda va a ser mayor o menor. Pero esto dicho a grandes rasgos.

-- Las columnas que nombrás en el SELECT ... hacen a la dimensión horizontal. Cuantas más columnas pidas que integren la grilla de resultado, más tiempo le lleva al servidor armarla.
-- Las filas que componen la grilla son las que responden al WHERE y hacen a la dimensión vertical. Cuantas más filas queden en la grilla resultante más tiempo le lleva al servidor armar el resultado y cuanto más difícil sea encontrar las filas que responden al WHERE más tiempo adicional le va a llebar al servidor armar el resultado.

De ambas dimensiones, la más importante es la de filas y la existencia de índices que respondan a los filtros que usás son la clave de la velocidad de las búsquedas.

Por ejemplo, si tenés una tabla "usuarios" con 1 millón de registros y hacés SELECT apellido FROM usuario WHERE dni=33333 puede pasar que: A) si la tabla tiene un índice por dni, entonces te lo va a encontrar casi instantáneamente. B) Si la tabla no tiene un índice por dni, a mysql no le queda otra que buscar uno por uno en 1 millón de registros aquel que cumpla la condición. Esa consulta por más que estás pidiendo sólo una columna demoraría mucho por su dimensión de filas.

De nuevo, vos sos el que juega con ambas dimensiones. como consejo no pidas más columnas que las necesarias en cada query y tratá que los WHERE estén contemplados en los índices que armes para las tabls.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

optimizacion de una tabla de mysql

Publicado por sam (13 intervenciones) el 24/11/2012 15:39:11
Una explicacion la tuya magistral, me ha quedado ahora muy claro como enfocar el asunto, gracias de veras.

Por cierto conoces algo de el sistema de bases de datos llamado "cassandra"?

Si es asi que opinas , es que he oido hablar de el, y dicen que es muy potente y rapido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar