2011-02-10 22 views
5

Estoy ejecutando el mismo SQL (a continuación), en 2 entornos diferentes con el mismo conjunto de índice y el mismo tamaño de tabla. pero me dieron 2 diferentes planes de explicar (attached)mismo SQL pero diferente plan de explicación

  1. utiliza un Combinación de mezcla cartesiano - muy lento
  2. utiliza Coordinador PX/PX Enviar/PX RECIBIR - muy rápido

de consultas :

SELECT * 
FROM SIEBEL.S_PARTY PRTY, SIEBEL.S_CONTACT CONT, HPQ_IF_ENTERPRISE_DIRECTORY ED,SIEBEL.S_BU BU 
WHERE PRTY.ROW_ID = CONT.PAR_ROW_ID 
AND BU.ROW_ID(+)=CONT.BU_ID 
AND CONT.EMP_NUM IS NOT NULL 
AND ED.HPSTATUS NOT IN ('Terminated', 'Retired', 'Deceased') 
AND ED.EMPLOYEENUMBER = UPPER (LPAD (CONT.EMP_NUM, 8, '0')) 
AND (SUBSTR(ED.MODIFYTIMESTAMP,1,14) >= '19800101' OR ED.MODIFYTIMESTAMP IS NULL) 

¿Alguna idea de cuáles son las posibles causas para causar esta diferencia? ¿Y qué significa el segundo plan de explicación con (cosas PX)?

Tenga en cuenta que no estoy buscando cambiar la consulta SQL (congelar en producción).

Muchas gracias.

Respuesta

8

PX indica parallel processing. Es posible que no esté disponible en la otra base de datos debido a la configuración de la sesión (o si la otra base de datos es una edición o versión diferente).

+0

Gracias Gary, tienes razón. Encontré que el problema es causado por los "índices" que tienen un grado como DEFAULT. Supongo que tomaría el valor de grado del nivel de sesión DB que podría ser diferente. Después de forzar el grado en el nivel de índice a 4, pude resolverlo. Gracias. – iwan

4

El plan para una consulta no solo depende del tamaño de la tabla o los índices, sino también de muchos otros factores, principalmente las estadísticas de la tabla, sus columnas y sus índices. Estas estadísticas incluyen factores tales como el factor de agrupamiento, que puede hacer una gran diferencia en el costo calculado. Además, diferentes estadísticas del sistema, parámetros del optimizador, estructura de la tabla (por ejemplo, particiones vs. no particiones) y tamaño del bloque de la base de datos entran en juego y la más mínima diferencia entre entornos puede favorecer un plan diferente.

+0

Tienes razón Jeffrey, gracias. – iwan

3

¿Las tablas tienen un GRADO diferente? Compruebe esta consulta en ambos entornos:

select table_name, degree from all_tables where table_name in ('S_PARTY', 'S_CONTACT', 'HPQ_IF_ENTERPRISE_DIRECTORY','S_BU'); 
+0

Gracias Jonearles, agradezco su casi a la respuesta correcta, en mi situación. Estoy desconcertado qué respuestas debo aceptar, ya que todas tienen razón :) – iwan

+0

Está bien iwan, recomendé las respuestas que fueron útiles, marcó como "correcta" la respuesta que fue más útil, y todos seremos felices:) –

Cuestiones relacionadas