Optimización SQL. Ejemplo 1. Producto cartesiano.

Para Nacho, por haber descubierto la pieza que faltaba. 😛 La siguiente consulta se ha cancelado tras 15 horas y 37 minutos de ejecución.SQL> select count(*) from (SELECT BITOWN03.BS_C_CLIENTES_BIT_03.DNICIF_DE,  2    BITOWN03.HS_C_ESTADOS_CONTRATO_BIT_03.CONTRATO_ID,  3    HSCONTRATOS_ESTADOS.ESTADO_DE,  4    BITOWN03.HS_C_ESTADOS_CONTRATO_BIT_03.FEC_ESTADO_DT,  5    BITOWN03.BS_C_CLIENTES_BIT_03.ABONADO_ID  6  FROM  7    BITOWN03.HS_C_ESTADOS_CONTRATO_BIT_03,  8    BITOWN03.LK_C_ESTADOS_BIT_03  HSCONTRATOS_ESTADOS,  9    BITOWN03.BS_C_CLIENTES_BIT_03, 10    BITOWN03.BS_C_CONTRATOS_BIT_03  CONTRATOS 11  WHERE  BITOWN03.BS_C_CLIENTES_BIT_03.ABONADO_ID          = CONTRATOS.ABONADO_ID 12    AND  BITOWN03.HS_C_ESTADOS_CONTRATO_BIT_03.CONTRATO_ID = CONTRATOS.CONTRATO_ID 13    AND  BITOWN03.HS_C_ESTADOS_CONTRATO_BIT_03.ESTADO_ID   = HSCONTRATOS_ESTADOS.ESTADO_ID 14    AND  BITOWN03.HS_C_ESTADOS_CONTRATO_BIT_03.FEC_ESTADO_DT 15                   BETWEEN  to_date(’01-06-2005 00:00:00′,’DD-MM-YYYY HH24:MI:SS’) 16                       AND  to_date(’30-06-2005 23:59:59′,’DD-MM-YYYY HH24:MI:SS’) 17   AND  BITOWN03.HS_C_ESTADOS_CONTRATO_BIT_03.ESTADO_ID  =  ‘BA’);  BITOWN03.HS_C_ESTADOS_CONTRATO_BIT_03,           *ERROR at line 7:ORA-00028: your session…

Optimización SQL. Ejemplo 2. NOT IN vs. NOT EXISTS.

Para Fernando, por la que le espera. 😛 La siguiente consulta se ha cancelado tras 5 horas y 11 minutos en ejecutarse.SELECT count(CLI.COD_ABONADO)   FROM BITOWN02.TM_C_CLIENTES_SAC_02 CLI,        BITOWN02.TE_ERRORES_BIT_02 TE   WHERE CLI.ROWID = TE.FILA_ID (+)     AND ‘TM_C_CLIENTES_SAC_02’ = TE.TABLA_DE (+)     AND TE.ERROR_ID IS NULL   AND CLI.COD_ABONADO NOT IN (   SELECT CU.ABONADO_id      FROM BITOWN03.BS_C_CONTRATOS_BIT_03 CONT, BITOWN03.BS_C_CUENTAS_BIT_03 CU    WHERE CU.CUENTA_ID=CONT.CUENTA_ID  );…

Optimización SQL. Ejemplo 3. El truco de los abanicos (fan trick).

Para Manel Moreno, que no me ha dado ningún beso por ésto. 😛 La siguiente consulta tardaba 11 horas en ejecutarse.SELECT DISTINCT A.NODO_ID, B.NODO_B_ID NODO_EQ1FROM BITOWN03.BS_R_NODOS_BIT_03 A,         BITOWN03.RE_R_CONEX_EXTERNAS_BIT_03 B,         BITOWN03.TMP_NODOS_OK_EST_BIT_03 CWHERE A.NODO_ID = B.NODO_A_ID  AND B.NODO_B_ID = C.NODO_ID; con el siguiente plan de ejecución:SQL> @c:oracleora92rdbmsadminutlxpls PLAN_TABLE_OUTPUT————————————————————————————- ———————————————————————————–| Id  | Operation              |  Name                    | Rows  | Bytes | Cost  |———————————————————————————–|   0 | SELECT…

Optimización SQL. Ejemplo 4. Mala cardinalidad.

Para Cristina Álvarez, quien confió en mi desde el primer momento y lo disimuló con toda su alma. 🙂 La siguiente consulta ha sido cancelada tras una hora y veinte minutos de ejecución. SELECT N2.ENTIDAD_ID,        CLI.rowid row_id, cli.*,        MAX(REL.ABONADO_PADRE_ID) OVER (PARTITION BY ABONADO_HIJO_ID) REL_ABONADO_PADRE_IDFROM BITOWN03.BS_V_MGEC_NODO_BIT_03 N1,     BITOWN03.BS_V_MGEC_NODO_BIT_03 N2,     BITOWN03.BS_V_MGEC_REL_NODOS_BIT_03 RN,     BITOWN02.TM_C_CLIENTES_SAC_02 CLI,     BITOWN03.RE_C_RELACIONES_ABONADO_BIT_03…