resueltos plan optimizar optimización optimizacion inner ejercicios ejecución consultas sql oracle optimization hints

sql - plan - ¿El optimizador de Oracle usará varias sugerencias en el mismo SELECCIONAR?



optimizar sql server (2)

Estoy tratando de optimizar el rendimiento de las consultas y he tenido que recurrir al uso de consejos de optimización. Pero nunca supe si el optimizador usará más de una pista a la vez.

p.ej

SELECT /*+ INDEX(i dcf_vol_prospect_ids_idx)*/ /*+ LEADING(i vol) */ /*+ ALL_ROWS */ i.id_number, ... FROM i_table i JOIN vol_table vol on vol.id_number = i.id_number JOIN to_a_bunch_of_other_tables... WHERE i.solicitor_id = ''123'' AND vol.solicitable_ind = 1;

El plan de explicación muestra el mismo costo, pero sé que es solo una estimación.

Supongamos que se han calculado todas las estadísticas de tabla e índice. FYI, el índice dcf_vol_prospect_ids_idx está en la columna i.solicitor_id.

Gracias,

Estofado


De hecho, la recomendación de Jonathan Lewis, autor de Oracle Fundamentals basado en los costos, es que si la CBO no logra encontrar el plan correcto, debe hacerse cargo del trabajo de la CBO y "poner en capas" los consejos: un promedio de dos consejos por mesa en la consulta.

La razón es que una pista podría conducir a otro plan malo y posiblemente incluso peor de lo que la CBO recibiría sin ayuda. Si el CBO es incorrecto, debes darle todo el plan, no solo un pequeño empujón en la dirección correcta.


Intente especificar todos los consejos en un solo bloque de comentarios, como se muestra en este ejemplo de la maravillosa documentación de Oracle ( http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm ).

16.2.1 Especificación de un conjunto completo de sugerencias

Al usar sugerencias, en algunos casos, es posible que deba especificar un conjunto completo de sugerencias para garantizar el plan de ejecución óptimo. Por ejemplo, si tiene una consulta muy compleja, que consiste en muchas combinaciones de tablas, y si especifica solo la sugerencia de INDICE para una tabla determinada, entonces el optimizador necesita determinar las rutas de acceso restantes que se utilizarán, así como las correspondientes unir métodos Por lo tanto, aunque dio la sugerencia de INDEX, es posible que el optimizador no use necesariamente esa sugerencia, ya que el optimizador podría haber determinado que el índice solicitado no se puede usar debido a los métodos de unión y las rutas de acceso seleccionadas por el optimizador.

En el ejemplo 16-1, la sugerencia LEADING especifica el orden de unión exacto que se utilizará; los métodos de unión que se utilizarán en las diferentes tablas también se especifican.

Ejemplo 16-1 Especificación de un conjunto completo de sugerencias

SELECT /*+ LEADING(e2 e1) USE_NL(e1) INDEX(e1 emp_emp_id_pk) USE_MERGE(j) FULL(j) */ e1.first_name, e1.last_name, j.job_id, sum(e2.salary) total_sal FROM employees e1, employees e2, job_history j WHERE e1.employee_id = e2.manager_id AND e1.employee_id = j.employee_id AND e1.hire_date = j.start_date GROUP BY e1.first_name, e1.last_name, j.job_id ORDER BY total_sal;