2010-10-07 17 views
6

Estoy escribiendo una aplicación cliente-servidor win32 en Delphi 7 y en una sección necesito traer aprox. 100k (menos o más) filas con datos de una base de datos Oracle. Todo está bien hasta el momento, pero se debe calcular uno de los campos (una división simple con un gran número).que es la consulta más rápida de win32 o SQL?

Mi pregunta es, ¿cómo consume menos recursos y es óptimo hacer la división en la consulta SQL (tal vez un procedimiento de almacenamiento) o calcular el valor en el código para este campo (en el servidor)? No quiero usar un TDataset con campos calculados.

El sistema Oracle (v 9.2) también lo utilizan otras aplicaciones, no está dedicado solo a esta aplicación.

Gracias de antemano.

+0

¿Qué vas a hacer con esa información? ¿Los envías de vuelta a la base de datos o una vez en el cliente que simplemente están manipulados allí? Como se respondió, mot of the time se usará para transferir esos datos. El verdadero ahorro es si puede evitar transferir tantas filas. –

Respuesta

8

Los motores SQL están diseñados para este tipo de tareas, por lo que la respuesta es make the operation in the oracle system.

hacer siempre las tareas de manipulación de datos SQL en el servidor de base de datos, que es diseñado para eso.

+1

Delphi también está diseñado para ese tipo de operación escalar, por lo que puede suceder igual de bien allí. No queda claro a partir de la pregunta si la división tiene algún sentido en un contexto que no sea la aplicación, por lo que no cejaría en ninguno de los enfoques. Podría si supiera más. –

+0

Las operaciones de mi humilde opinión que no reducen el número de tuplas devueltas son más lentas en DB que en Delphi. –

5

cómo es menor consumo de recursos y óptima, para hacer la división en la consulta SQL (tal vez un procedimiento de almacenamiento), o para calcular el valor de código para este campo (en el lado del servidor)?

No debería haber ninguna diferencia. La mayor parte del tiempo se gastará en calcular y transmitir 100.000 filas.

7

Con tal operación escalar, la diferencia de rendimiento será trivial. Haz lo que sea semánticamente más razonable o más conveniente.

4

Si el rendimiento es el mismo, lo haría en el lugar donde sería más fácil de mantener/configuración. Si la base de datos requiere una ventana de mantenimiento dedicada (como el sábado a la medianoche) para los cambios de metadatos, elegiría una solución de cliente o de nivel medio sobre un procedimiento almacenado.

+1

Muy buen punto. Si bien estoy de acuerdo con otros en que probablemente sea más eficiente hacerlo en el servidor, puede ser mucho más práctico hacerlo donde pueda ponerlo rápidamente en sus manos y realizar cambios. En algunos entornos, los cambios en el escritorio son fáciles, y los cambios del servidor (fuera del ciclo de lanzamiento normal) requieren una firma VP. –

+0

Lado del revés: volver a lanzar la aplicación a 3000 usuarios si el cálculo cambia puede ser más complicado que obtener el cambio de base de datos aprobado. –

Cuestiones relacionadas