Re: Ayuda con una consulta...

From: Rodriguez Fernando <rodriguez(at)ort(dot)edu(dot)uy>
To: Nicolás Domínguez Florit <ndomin(at)rec(dot)unicen(dot)edu(dot)ar>
Cc: pssql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda con una consulta...
Date: 2007-12-04 13:10:23
Message-ID: 475551BF.8090103@ort.edu.uy
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Nicolás Domínguez Florit wrote:
> Hola Fernando, hola lista!
> Luego de probar de agregar los índices que me recomendó fernando, la
> consulta tardo 20 minutos menos.
> Les paso el nuevo explain analyze:
> http://explain-analyze.info/query_plans/1521-nicolasdom-siu-2
>
> Se les ocurre algo mas para que mejore? ya que 1 hora me parece que es
> mucho tiempo.
> Muchas Gracias!
>
> Nicolas.
>
> Rodriguez Fernando escribió:
>> tenes indices sobre las tablas?, si no los tenes, se me ocurren los
>> siguientes (verificale los nombres) :
>> rrhh_cubo_publicado_810 cod_rrhh_importacion + cod_institucion
>> rrhh_cargos. cod_rrhh_importacion + cod_rrhh_escalafon +
>> cod_rrhh_nivel_ensenianza + numero_cargo
>> rrhh_detalles_liquidaciones_haberes cod_rrhh_importacion
>> rrhh_escalafones_universidades cod_rrhh_importacion +
>> cod_rrhh_escalafon + cod_cargo_universidad
>> rrhh_cargos cod_rrhh_importacion + cod_rrhh_escalafon +
>> cod_cargo_universidad
>>
>> Saludos Fernando
>>
>> Nicolás Domínguez Florit wrote:
>>> Tengo una consulta que me esta tardando mucho y me gustaría que
>>> cuando tengan unos minutos le echen un vistazo para ver si se les
>>> ocurre algo. Les paso las tabas, los registros de cada tabla, la
>>> consulta y el explain analyze.
>>>
>>> Uso un motor 8.2.4,
>>>
>>> Tablas:
>>> -------
>>>
>>> CREATE TABLE rrhh_cargos
>>> (
>>> numero_cargo numeric(9) NOT NULL,
>>> cod_ona_unidad_academica integer NOT NULL,
>>> cod_ona_rama character(4) NOT NULL,
>>> cod_ona_disciplina character(4) NOT NULL,
>>> cod_ona_area character(4) NOT NULL,
>>> cod_fuente_financiamiento numeric(2) NOT NULL,
>>> cod_rrhh_importacion integer NOT NULL,
>>> cuil_cuit numeric(11) NOT NULL,
>>> cod_cargo_universidad character(4) NOT NULL,
>>> cod_rrhh_estado_laboral integer NOT NULL,
>>> cod_rrhh_estado_cargo character(1),
>>> cod_rrhh_tipo_planta character(1) NOT NULL,
>>> cod_rrhh_situacion_laboral integer NOT NULL,
>>> cod_rrhh_agrupamiento_no_docente character(1),
>>> cod_rrhh_nivel_ensenianza integer NOT NULL,
>>> grado numeric(1) NOT NULL,
>>> horas_dedicacion numeric(2) NOT NULL,
>>> meses_antiguedad numeric(3) NOT NULL,
>>> anios_antiguedad numeric(2) NOT NULL,
>>> fecha_alta date NOT NULL,
>>> fecha_baja date,
>>> cod_dependencia numeric(2) NOT NULL,
>>> cod_sub_dependencia numeric(2) NOT NULL,
>>> programa numeric(2) NOT NULL,
>>> subprograma numeric(2) NOT NULL,
>>> proyecto numeric(2) NOT NULL,
>>> actividad numeric(2) NOT NULL,
>>> jefatura character(1) NOT NULL,
>>> cod_rrhh_equivalencia_cargo integer NOT NULL,
>>> cod_rrhh_escalafon character(1) NOT NULL,
>>> numero_cargo_persona integer,
>>> dedicacion_docente numeric(5,2),
>>> dedicacion_investigacion numeric(5,2),
>>> dedicacion_extension numeric(5,2),
>>> dedicacion_gestion numeric(5,2),
>>> CONSTRAINT rrhh_cargos_pkey PRIMARY KEY (numero_cargo,
>>> cod_rrhh_importacion),
>>> CONSTRAINT rrhh_cargos_cod_cargo_universidad_fkey FOREIGN KEY
>>> (cod_cargo_universidad, cod_rrhh_escalafon, cod_rrhh_importacion)
>>> REFERENCES rrhh_escalafones_universidades
>>> (cod_cargo_universidad, cod_rrhh_escalafon, cod_rrhh_importacion)
>>> MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cod_fuente_financiamiento_fkey FOREIGN KEY
>>> (cod_fuente_financiamiento)
>>> REFERENCES fuentes_financiamiento (cod_fuente_financiamiento)
>>> MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cod_ona_rama_fkey FOREIGN KEY
>>> (cod_ona_rama, cod_ona_disciplina, cod_ona_area)
>>> REFERENCES ona_jerarquias (cod_ona_rama, cod_ona_disciplina,
>>> cod_ona_area) MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cod_ona_unidad_academica_fkey FOREIGN KEY
>>> (cod_ona_unidad_academica)
>>> REFERENCES ona_unidades_academicas (cod_ona_unidad_academica)
>>> MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cod_rrhh_agrupamiento_no_docente_fkey
>>> FOREIGN KEY (cod_rrhh_agrupamiento_no_docente)
>>> REFERENCES rrhh_agrupamientos_no_docentes
>>> (cod_rrhh_agrupamiento_no_docente) MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cod_rrhh_equivalencia_cargo_fkey FOREIGN
>>> KEY (cod_rrhh_equivalencia_cargo, cod_rrhh_escalafon)
>>> REFERENCES rrhh_equivalencias_cargos
>>> (cod_rrhh_equivalencia_cargo, cod_rrhh_escalafon) MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cod_rrhh_estado_cargo_fkey FOREIGN KEY
>>> (cod_rrhh_estado_cargo)
>>> REFERENCES rrhh_estados_cargos (cod_rrhh_estado_cargo) MATCH
>>> SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cod_rrhh_estado_laboral_fkey FOREIGN KEY
>>> (cod_rrhh_estado_laboral)
>>> REFERENCES rrhh_estados_laborales (cod_rrhh_estado_laboral)
>>> MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cod_rrhh_nivel_ensenianza_fkey FOREIGN KEY
>>> (cod_rrhh_nivel_ensenianza)
>>> REFERENCES rrhh_niveles_ensenianza (cod_rrhh_nivel_ensenianza)
>>> MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cod_rrhh_situacion_laboral_fkey FOREIGN KEY
>>> (cod_rrhh_situacion_laboral)
>>> REFERENCES rrhh_situaciones_laborales
>>> (cod_rrhh_situacion_laboral) MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cod_rrhh_tipo_planta_fkey FOREIGN KEY
>>> (cod_rrhh_tipo_planta)
>>> REFERENCES rrhh_tipos_planta (cod_rrhh_tipo_planta) MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_cargos_cuil_cuit_fkey FOREIGN KEY (cuil_cuit,
>>> cod_rrhh_importacion)
>>> REFERENCES rrhh_datos_personales (cuil_cuit,
>>> cod_rrhh_importacion) MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT
>>> ) ;
>>> -- cantidad de registros: 1.749.254
>>>
>>>
>>> CREATE TABLE rrhh_escalafones_universidades
>>> (
>>> cod_cargo_universidad character(4) NOT NULL,
>>> cod_rrhh_equivalencia_cargo integer NOT NULL,
>>> cod_rrhh_escalafon character(1) NOT NULL,
>>> cod_rrhh_importacion integer NOT NULL,
>>> cod_rrhh_nivel_ensenianza integer NOT NULL,
>>> descripcion character varying(30) NOT NULL,
>>> dedicacion character varying(30) NOT NULL,
>>> horas_dedicacion numeric(2) NOT NULL,
>>> sueldo_basico numeric(10,2) NOT NULL,
>>> remunerativo_bonificable numeric(10,2) NOT NULL,
>>> remunerativo_no_bonificable numeric(10,2) NOT NULL,
>>> no_remunerativo_bonificable numeric(10,2) NOT NULL,
>>> no_remunerativo_no_bonificable numeric(10,2) NOT NULL,
>>> otra_remuneraciones numeric(10,2) NOT NULL,
>>> decreto_1610 numeric(10,2) NOT NULL,
>>> gastos_representacion numeric(10,2) NOT NULL,
>>> CONSTRAINT rrhh_escalafones_universidades_pkey PRIMARY KEY
>>> (cod_cargo_universidad, cod_rrhh_escalafon, cod_rrhh_importacion),
>>> CONSTRAINT
>>> rrhh_escalafones_universidades_cod_rrhh_equivalencia_cargo_fkey
>>> FOREIGN KEY (cod_rrhh_equivalencia_cargo, cod_rrhh_escalafon)
>>> REFERENCES rrhh_equivalencias_cargos
>>> (cod_rrhh_equivalencia_cargo, cod_rrhh_escalafon) MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT
>>> rrhh_escalafones_universidades_cod_rrhh_importacion_fkey FOREIGN KEY
>>> (cod_rrhh_importacion)
>>> REFERENCES rrhh_importaciones (cod_rrhh_importacion) MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT
>>> rrhh_escalafones_universidades_cod_rrhh_nivel_ensenianza_fkey
>>> FOREIGN KEY (cod_rrhh_nivel_ensenianza)
>>> REFERENCES rrhh_niveles_ensenianza (cod_rrhh_nivel_ensenianza)
>>> MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT
>>> ) ;
>>> -- cantidad de registros: 24.063
>>>
>>>
>>> CREATE TABLE rrhh_cubo_publicado_810
>>> (
>>> cod_rrhh_importacion integer,
>>> cod_pedido integer,
>>> cod_institucion integer,
>>> periodo date,
>>> fecha_desde timestamp without time zone,
>>> fecha_publicacion timestamp with time zone
>>> ) ;
>>> -- cantidad de registros: 283
>>>
>>>
>>> CREATE TABLE rrhh_detalles_liquidaciones_haberes
>>> (
>>> cod_rrhh_concepto_liquidacion_haberes numeric(6) NOT NULL,
>>> cod_rrhh_importacion integer NOT NULL,
>>> numero_cargo numeric(9) NOT NULL,
>>> importe numeric(12,2) NOT NULL,
>>> anio_retroactivo numeric(4) NOT NULL,
>>> mes_retroactivo numeric(2) NOT NULL,
>>> CONSTRAINT
>>> rrhh_detalles_liquidaciones_h_cod_rrhh_concepto_liquidacio_fkey
>>> FOREIGN KEY (cod_rrhh_concepto_liquidacion_haberes,
>>> cod_rrhh_importacion)
>>> REFERENCES rrhh_conceptos_liquidaciones_haberes
>>> (cod_rrhh_concepto_liquidacion_haberes, cod_rrhh_importacion) MATCH
>>> SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT
>>> rrhh_detalles_liquidaciones_haberes_cod_rrhh_importacion_fkey
>>> FOREIGN KEY (cod_rrhh_importacion)
>>> REFERENCES rrhh_importaciones (cod_rrhh_importacion) MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT,
>>> CONSTRAINT rrhh_detalles_liquidaciones_haberes_numero_cargo_fkey
>>> FOREIGN KEY (numero_cargo, cod_rrhh_importacion)
>>> REFERENCES rrhh_cargos (numero_cargo, cod_rrhh_importacion)
>>> MATCH SIMPLE
>>> ON UPDATE RESTRICT ON DELETE RESTRICT
>>> ) ;
>>> -- cantidad de registros: 29.566.415
>>>
>>>
>>> Consulta:
>>> ---------
>>>
>>> explain analyze
>>> select t.periodo,
>>> t.cod_institucion,
>>> ca.numero_cargo,
>>> ca.cuil_cuit,
>>> ca.cod_rrhh_escalafon,
>>> ca.cod_cargo_universidad,
>>> eu.descripcion as categ_univ_descripcion,
>>> eu.dedicacion as categ_univ_dedicacion,
>>> ca.cod_rrhh_equivalencia_cargo,
>>> ca.cod_ona_unidad_academica,
>>> ca.cod_fuente_financiamiento,
>>> ca.cod_rrhh_estado_laboral,
>>> ca.cod_rrhh_estado_cargo,
>>> ca.cod_rrhh_tipo_planta,
>>> ca.cod_rrhh_situacion_laboral,
>>> ca.cod_rrhh_nivel_ensenianza,
>>> ca.meses_antiguedad,
>>> ca.horas_dedicacion,
>>> ca.numero_cargo_persona as nro_cargo_pers,
>>> ca.cod_rrhh_agrupamiento_no_docente,
>>> d.cod_rrhh_concepto_liquidacion_haberes,
>>> d.anio_retroactivo,
>>> d.mes_retroactivo,
>>> d.importe,
>>> 1 as Cant_ConceptosXCargos from rrhh_cargos ca,
>>> rrhh_escalafones_universidades eu,
>>> rrhh_cubo_publicado_810 t,
>>> rrhh_detalles_liquidaciones_haberes d
>>> where t.cod_institucion<>7 and
>>> ca.cod_rrhh_importacion=t.cod_rrhh_importacion
>>> and eu.cod_cargo_universidad = ca.cod_cargo_universidad
>>> and eu.cod_rrhh_importacion = ca.cod_rrhh_importacion
>>> and eu.cod_rrhh_escalafon = ca.cod_rrhh_escalafon
>>> and (ca.cod_rrhh_escalafon = 'D') and (ca.cod_rrhh_nivel_ensenianza
>>> = 1 )
>>> and d.cod_rrhh_importacion=t.cod_rrhh_importacion
>>> and d.numero_cargo = ca.numero_cargo
>>>
>>>
>>> Explain Analyze:
>>> -----------------
>>>
>>> http://explain-analyze.info/query_plans/1499-nicolasdom-siu
>>>
>>>
>>> Antes de correr la consulta se habia realizado:
>>> analyze rrhh_cargos;
>>> analyze rrhh_escalafones_universidades;
>>> analyze rrhh_cubo_publicado_810;
>>> analyze rrhh_detalles_liquidaciones_haberes ;
>>>
>>>
>>> Muchas Gracias!
>>>
>>> Nicolas.
>>>
>> --
>> TIP 4: No hagas 'kill -9' a postmaster
>>
>>
Puede que parezca manotazo de ahogado, pero para probar, podrias
utilizar join's en lugar de producto cartesiano, con lo cual en el
where solo te
quedarian los filtros :
t.cod_institucion<>7 and
(ca.cod_rrhh_escalafon = 'D') and (ca.cod_rrhh_nivel_ensenianza = 1 )

Saludos Fernando

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Marco Antonio 2007-12-04 13:37:00 Re: Herramienta CASE
Previous Message Pablo Braulio 2007-12-04 12:35:12 Re: No acierto usando CASE.