PDA

Ver la Versión Completa : Optimizacion Base de Datos


Jvilomar
18-01-2006, 20:03:48
Saludos mis queridos amigos del Club Delphi..

Tengo el siguiente dilema y me gustaria que ustedes me den su siempre sabia opinion.

TEngo una base de datos en SQL Server 2000 en esta eh exportado tres tablas desde DBase donde Cada Tabla tiene 2 millones de Registros. el asunto es que primero quisiera unir todos los registros en una sola tabla ya que voy a tener que consultar todos los registros en una sola consulta. apenas pude crearle el indice a una de las tablas porque cuando intento hacerlo en las otras dos se me cuelga el servidor sql.

Ahora bien la pregunta es: ¿ Esta bien unirlos en una sola tabla? ¿si es asi.. existe alguna forma de que yo pueda optimizar la tabla para que la consulta no se haga superrrrr lenta? o simplemente la dejo como esta en tres tablas diferentes y hago la consulta tabla por tabla? que me recomiendan ustedes?

Muchas gracias por Adelantado...

Atentamente

Jose Manuel.

pd. por si las moscas pienso hacer la consulta en Delphi 7

vtdeleon
18-01-2006, 23:56:42
Saludos

Eso depende de que informacion contenga cada tabla y/o de que informacion deseas consultar, yo supongo que las tablas tienen la estructura de los campos iguales.

Lo de consultar; Hazlo con un rango, sin traer todos los registros y campos.

Jvilomar
19-01-2006, 15:00:12
PUes tienes razon vtdeleon las tablas tienen exactamente la misma estructura. Resulta que estaban en DBase y supongo (no conozco mucho si dbase tiene algunas limitaciones en cuanto a capacidad de registro se refiere) que tuvieron que dividirlas en tres porque son unos 7 millones de registro.

el asunto es tratar de ver si existe alguna forma de optimizarla porque ya estoy uniendolas en una sola y francamente me da hasta cierto miedo que el rendimiento y desempeño aun en SQLServer sea lento.

vtdeleon
19-01-2006, 17:26:43
Saludos

Con Dbase, no impota que utilices sentencias sql, filtros, o lo que sea para obtener cierta cantidad de registros, éstos siempre traerán tooooda la información y despues aplican el filtro. Lo cual conlleva a un bajo rendimiento.

En MSSQL y en cualquier otro respetable (Oracle, IB/FB, MySQL,..) es diferente. Ya que éstos ofrecen solo el servicio o la petición que el cliente demande. Solo lo necesario.

Imagino que nadie quiere ver toda la información (7 millones de registros). Seguro que solo quieren ver una parte de la información y mediante una sentencia Sql bién estructurada, pidiendo solo lo necesario, se peude llegar a optimizar mucho el flujo de información y el rendimiento.

mamcx
19-01-2006, 20:41:59
Es innecesario unir en una sola tabla. Para ello puedes crear una vista (que hace que virtuamente paresca una tabla).

No se si usas los componentes de ADO, pero en ese caso (o en cualquiera libreria relativamente moderna de acceso a sql) puedes crear un recordset de solo lectura y hacia adelante (read only, forward) y con los de ADO si lo pones la propiedades de ubicacion en el servidor deberia dar la lectura mas veloz posible.

Jvilomar
20-01-2006, 13:13:08
Gracias por Responder vtdelon y mamcx.

Para vtdeleon te explico que ya no estoy utilizando DBase solo lo puse como referencia para explicar desde el principio.

para mamcx no eh podido hacerlo ni siquiera como me explicaste, de hecho ni siquiera en el servidor me responde, o sea desde el mismo ConsoleManager se me cuelga cuando intento hacer una consulta por ejemplo de 2 o 3 registros.

Eso me tiene preocupado..... porque sinceramente necesito resolver ese problema...