No estoy seguro acerca de otras bases de datos, pero para SQL Server recomiendo el plan de ejecución. Es muy claro (aunque con un montón de desplazamiento vertical y horizontal, a menos que tengas un monitor de 400 ") muestra qué pasos de tu consulta están absorbiendo el tiempo.
Si tienes un paso que lleva un paso 80% loco, entonces tal vez se podría agregar un índice, luego de ajustar el índice, vuelva a ejecutar el plan de ejecución para encontrar el siguiente paso más grande.
Después de un par de ajustes puede encontrar que realmente no hay pasos que se mantengan de los demás, es decir, todos son de 1-2% cada uno. Si ese es el caso, entonces es posible que deba ver si hay alguna manera de reducir la cantidad de datos incluidos en su consulta, haga esos cuatro millones las órdenes de venta cerradas deben incluirse en la consulta "Órdenes de venta activas" No, así que excluya todas aquellas con ESTADO = 'C' ... o algo así .
Otra mejora que verá en el Plan de ejecución son las búsquedas en los marcadores, básicamente encuentra una coincidencia en el índice, pero luego SQL Server debe rastrear rápidamente la tabla para encontrar el registro que desea. En realidad, esta operación podría llevar más tiempo que el escaneo de la tabla, en primer lugar, si es así, ¿realmente necesita ese índice?
Con los índices, y especialmente con SQL Server 2005 debe mirar a la cláusula INCLUDE, esto básicamente le permite tener una columna en un índice sin estar realmente en el índice, por lo que si todos los datos que necesita para su consulta es en su índice o es una columna incluida, entonces SQL Server ni siquiera tiene que mirar la tabla, una gran recuperación de rendimiento.
es muy similar a [esta pregunta mayor] (http://stackoverflow.com/questions/39331/what-generic-techniques-can-be-applied-to-optimize-sql-queries#39344) – Unsliced