Hola a todos,
Estoy revisando con profiler una serie de ejecuciones y he visto esta
consulta que se ejecuta con bastante frecuencia, quería consultaros si se os
ocurre alguna forma de optimizarla (a parte de poner índices y demás que eso
ya lo tengo), es decir, obtener otra instrucción select que ofrezca los
mismos resultados y tenga mejor rendimiento.
Primero os explico la estructura de datos, intervienen tres tablas:
Clientes: Cliente, nombre, ... (Cliente es PK de Clientes)
Tarjetas: Cliente, Tarjeta, ... (Cliente es FK - relación uno a muchos con
Clientes, Tarjeta es PK de Tarjetas)
Servicios: Id, Tarjeta, Importe, ... (Id es PK de Servicios, Tarjeta es
FK -relación uno a muchos con Tarjetas)
select sum(importe) as sumaP
from servicios where fecha >= '20060709'
and tarjeta in (select tarjeta
from tarjetas
where cliente = (select cliente
from tarjetas
where tarjeta = 'ABCD' ))
Necesito que la consulta me devuelva la suma de los importes de todas las
tarjetas del cliente, por eso la select de nivel inferior obtiene el cliente
al que pertenece esa tarjeta, la del siguiente nivel obtiene la relación de
tarjetas de ese cliente, y ya la de nivel superior suma los importes de
todas esas tarjetas.
He intentado mejorarla, pero no lo he conseguido, y es una consulta que se
ejecuta con bastante frecuencia. Igual aún no he conectado 100% tras la
vuelta de vacaciones :-)
Muchas gracias
Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)
Leer las respuestas