usar resueltos plan para optimizar optimización optimizacion mis inner ejercicios ejecución datos consultas consulta como bases sql oracle optimization

resueltos - plan de ejecución y optimización de consultas sql server 2008 r2



¿Cómo usar Explain Plan para optimizar las consultas? (4)

Obtienes más que eso en realidad dependiendo de lo que estás haciendo. Echa un vistazo a esta página de explicaciones del plan . Supongo un poco que está usando Oracle y sabe cómo ejecutar el script para mostrar el resultado del plan. Para empezar, puede ser más importante buscar en el lado izquierdo el uso de un índice en particular o no y cómo se está utilizando ese índice. Debería ver cosas como "(Completo)", "(Por Index Rowid)", etc., si está realizando uniones. El costo sería lo siguiente a tener en cuenta, ya que los costos más bajos son mejores y notará que si realiza una unión que no utiliza un índice, puede obtener un costo muy elevado. También puede leer detalles sobre las columnas del plan de explicación .

Me han encargado que optimice algunas consultas sql en el trabajo. Todo lo que he encontrado apunta a usar Explicar Plan para identificar áreas problemáticas. El problema no puedo averiguar exactamente qué es lo que explica el plan. Obtienes Costo, Cardinalidad y bytes.

¿Qué indica esto y cómo debería usar esto como guía? ¿Son mejores los números bajos? ¿Mucho mejor? Cualquier contribución será muy apreciada.

O si tiene una mejor forma de optimizar una consulta, me interesaría.


Tienes el final borroso de la piruleta.

No hay forma de que, de manera aislada, sin mucha información adicional y experiencia, observe un plan de explicación y determine qué (si acaso) está causando un rendimiento inferior al óptimo. Si el ajuste de consultas se pudiera reducir a un proceso de 10 pasos, se realizaría mediante un proceso automático. Estaba a punto de enumerar todas las cosas que necesita entender para ser efectivo en esto, pero esa sería una lista muy larga.

la única respuesta corta en la que puedo pensar ... es buscar pasos en el plan que estén atravesando más bytes de los que imaginaba. Luego, piense cómo puede reducir ese número ... a través de un índice o una partición.

En serio, consiga el libro de Jonathan sobre los fundamentos del costo basado en Oracle

Obtenga el libro de Tom Kyte sobre Oracle Database Architecture y alquile una cabaña en el bosque por unas semanas.


Este es un área masiva de conocimiento (también conocido como arte negro).

El enfoque que generalmente tomo es:

  1. Ejecute la declaración SQL en cuestión,
  2. Obtenga el plan real (busque dbms_xplan),
  3. Compare el número estimado de filas (cardinalidad) con el número real de filas. Una gran diferencia indica un problema que debe solucionarse (por ejemplo, índice, histograma)
  4. Considere si puede crear un índice para acelerar parte del proceso (en general, donde conceptualmente piensa que el plan debe ir primero). Pruebe algunos índices.

Necesita comprender los impactos O () de diferentes índices en el contexto de lo que está pidiendo a la base de datos. Le ayuda a comprender estructuras de datos como b-trees, tablas hash, etc. Luego, cree un índice que pueda funcionar y repita el proceso.

Si Oracle decide no usar su índice, aplique una sugerencia INDEX () y observe el nuevo plan. El costo será mayor que el plan que eligió; esta es la razón por la que no eligió su índice. El plan sugerido podría conducir a una idea de por qué su índice no es bueno.


También supongo que estás usando Oracle. Y también le recomiendo que consulte la página web del plan de explicación, para empezar. Hay mucho para la optimización, pero se puede aprender.

A continuación, algunos consejos:

En primer lugar, cuando alguien te asigna tareas de optimización, casi siempre buscan un rendimiento aceptable en lugar de un rendimiento máximo. Si puede reducir el tiempo de ejecución de una consulta de 3 minutos a 3 segundos, no se preocupe reduciéndolo a 2 segundos, hasta que se lo pidan.

En segundo lugar, haga una comprobación rápida para asegurarse de que las consultas que está optimizando sean lógicamente correctas. Parece absurdo, pero no puedo decirte la cantidad de veces que me han pedido consejo sobre una consulta de ejecución lenta, ¡solo para descubrir que de vez en cuando daba respuestas incorrectas! Y como resultado, la depuración de la consulta a menudo resultó para acelerarlo también.

En particular, busque la frase "Unión cartesiana" en el plan de explicación. Si lo ves allí, es muy probable que encuentres una unión cartesiana no intencional. El patrón habitual para una unión cartesiana involuntaria es que la cláusula FROM enumera tablas separadas por comas, y las condiciones de unión están en la cláusula WHERE. Excepto que falta una de las condiciones de unión, por lo que Oracle no tiene más remedio que realizar una unión cartesiana. Con tablas grandes, este es un desastre de rendimiento.

Es posible ver una unión cartesiana en el plan de explicación donde la consulta es lógicamente correcta, pero la asocio con versiones anteriores de Oracle.

Busque también el índice compuesto no usado. Si la primera columna de un índice compuesto no se utiliza en la consulta, Oracle puede usar el índice de manera ineficiente o no utilizarlo en absoluto. Déjame dar un ejemplo:

La consulta fue:

select * from customers where State = @State and ZipCode = @ZipCode

(El DBMS no era Oracle, por lo que la sintaxis era diferente y olvidé la sintaxis original).

Un vistazo rápido a los índices reveló un índice en Clientes con las columnas (País, Estado, Código postal) en ese orden. Cambié la consulta para leer

select * from customers where Country = @Country and State = @State and ZipCode = @ZipCode

y ahora funcionó en aproximadamente 6 segundos en lugar de aproximadamente 6 minutos, porque el optimizador pudo usar el índice con una buena ventaja. Le pregunté a los programadores de aplicaciones por qué habían omitido el país de los criterios, y esta fue su respuesta: sabían que todas las direcciones tenían un país igual a ''EE. UU'', ¡así que pensaron que podían acelerar la consulta dejando fuera ese criterio!

Desafortunadamente, optimizar la recuperación de la base de datos no es lo mismo que afeitar microsegundos fuera del tiempo de computación. Implica comprender el diseño de la base de datos, especialmente los índices, y al menos una visión general de cómo el optimizador hace su trabajo.

Generalmente obtiene mejores resultados del optimizador cuando aprende a colaborar con él en lugar de tratar de ser más astuto.

¡Buena suerte para acelerar en la optimización!