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…

Búsquedas fuzzy, índices context y gestión documental con Oracle. Parte II.

(Continua a partir de parte I). Recientemente he estado hablando con gente interesada en la gestión de contenidos de documentos y, en general, la mayoría utiliza formatos PDF. El anterior artículo se basaba únicamente en documentos word, y he creído interesante hacer un ejemplo de como Intermedia realiza la indexación de documentos word y PDF…

Defragmentación de un tablespace mediante scripts.

En muchas ocasiones recurro a generar scripts a partir de consultas.Ejecuto en SQL*Plus algo parecido a: SQL> select ‘alter package ‘||owner||’.’||object_name||’ compile;’ sentencia  2> from dba_objects where status=’INVALID’ and object_type =’PACKAGE BODY’; SENTENCIA——————————————————————alter package USUARIO.MAP02_CUACON02 compile;alter package USUARIO.MAP01_CUACON03 compile;alter package USUARIO.MAP01_FLUXHISTO03_CI compile;alter package USUARIO.MAP01_BALANCEBE03 compile;alter package USUARIO.MAP01_PAHISTOACT03 compile;alter package USUARIO.MAP01_RAPPELS03 compile; 6 filas seleccionadas. y simplemente copio…