Hola Lista

Por aqui nuevamente poniendo oficio!, tengo una aplicación que emplea
Hibernate para su persistencia (se está ejecutando en un PostgreSQL 11.7 )
dentro de las consultas que se están ejecutando de forma frecuente, esta no
se ha podido optimizar:

select carac0_.id as id10_, carac0_.guion_id as guion13_10_,
carac0_.nombreClase as nombreCl3_10_, carac0_.nombreGuion as nombreGu4_10_,
carac0_.observaciones as observac5_10_, carac0_.people as persona14_10_,
carac0_.tipificacion_id as tipific15_10_, carac0_.uniqueid as uniqueid10_,
carac0_.usuarioGestionaId as usuarioG7_10_, carac0_.fechaRemarcacion as
fechaRem8_10_, carac0_.numeroIntento as numeroIn9_10_, carac0_.prioridad as
prioridad10_, carac0_.telefonoActivo as telefon11_10_,
carac0_.telefonoRemarcacion as telefon12_10_, carac0_.DTYPE as DTYPE10_
from public.caracterizacionPantalla carac0_
cross join ( select id, fechaCreacion, fechaModificacion, idUsuarioCrea,
idUsuarioModifica, agent, agentChannel, apellidoCliente, callerId,
callerIdName, chanel, fechaGrabacion, fechaHoraContacto,
idServidorTelefonia, identificacionCliente, nombreCliente, queue,
tipoIdentificacionCliente, tipoLlamada, uniqueId, documento, fecha,
fechaInicioGestion, casoCrm_id, people_id, usuario_id, departamento,
estadoCivil, fechaAsigna, fechaNac, genero, guionBaseSalida_id,
guionOriginalSalida_id, datocomplementario1, datocomplementario2,
datocomplementario3, datocomplementario4, municipio, primerApellido,
primerNombre, segundoApellido, segundoNombre, telefono1, telefono2,
telefono3, telefono4, tipoDocumento, marcadorLista_id, usuarioAsigna_id,
usuarioAsignado_id, direccion, email, fechaEvento, horaEvento, lugarEvento,
motivo, motivoDescripcion, guionHtml_id, categoriaFormulario, formGuion_id,
categoriaVerificado, formVerificacion_id, null::varchar as audio,
null::int8 as idBase, null::varchar as identificacion, null::varchar as
nombres, null::varchar as autorizaFactura, null::varchar as celularTutor,
null::varchar as ciudadAtencion, null::bool as consultoEstadoCuenta,
null::bool as consultoPlantillaEstado, null::bool as consultoTickets,
null::varchar as descripcion, null::varchar as detalleTransaccion,
null::varchar as errorDetail, null::varchar as estadoBot, null::varchar as
idCalificador, null::varchar as idCredito, null::varchar as
identificacionTutor, null::int4 as intentosCreacionCasoCosmos,
null::varchar as menorEdad, null::varchar as motivoWSCosmos, null::varchar
as motivoWSCosmosNombre, null::varchar as nombreTutor, null::varchar as
numeroTicket, null::varchar as resultWSBPM, null::bool as
resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar as
telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar as
wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id, null::int8
as tipIndisponibilidad_id, null::int8 as directorio_id, null::bool as
enviarSms, 4 as clazz_ from public.GuionSimpleVerificado union all select
id, fechaCreacion, fechaModificacion, idUsuarioCrea, idUsuarioModifica,
agent, agentChannel, apellidoCliente, callerId, callerIdName, chanel,
fechaGrabacion, fechaHoraContacto, idServidorTelefonia,
identificacionCliente, nombreCliente, queue, tipoIdentificacionCliente,
tipoLlamada, uniqueId, documento, fecha, fechaInicioGestion, casoCrm_id,
people_id, usuario_id, departamento, estadoCivil, fechaAsigna, fechaNac,
genero, guionBaseSalida_id, guionOriginalSalida_id, datocomplementario1,
datocomplementario2, datocomplementario3, datocomplementario4, municipio,
primerApellido, primerNombre, segundoApellido, segundoNombre, telefono1,
telefono2, telefono3, telefono4, tipoDocumento, marcadorLista_id,
usuarioAsigna_id, usuarioAsignado_id, direccion, email, fechaEvento,
horaEvento, lugarEvento, motivo, motivoDescripcion, guionHtml_id,
categoriaFormulario, formGuion_id, null::varchar as categoriaVerificado,
null::int8 as formVerificacion_id, null::varchar as audio, null::int8 as
idBase, null::varchar as identificacion, null::varchar as nombres,
autorizaFactura, celularTutor, ciudadAtencion, consultoEstadoCuenta,
consultoPlantillaEstado, consultoTickets, descripcion, detalleTransaccion,
errorDetail, estadoBot, idCalificador, idCredito, identificacionTutor,
intentosCreacionCasoCosmos, menorEdad, motivoWSCosmos,
motivoWSCosmosNombre, nombreTutor, numeroTicket, resultWSBPM,
resultadoWSCosmos, smsOutboundId, telefonoTutor, tipoIdentificacionTutor,
wsTipBotResult, canalAtencion_id, tipEscalamiento_id, tipoBotInputData_id,
tipoCanalWsCosmos_id, tipoCliente_id, twitterConversacion_idInvitado,
twitterTweet_id, null::int8 as tipIndisponibilidad_id, null::int8 as
directorio_id, null::bool as enviarSms, 6 as clazz_ from public.Entrada
union all select id, fechaCreacion, fechaModificacion, idUsuarioCrea,
idUsuarioModifica, agent, agentChannel, apellidoCliente, callerId,
callerIdName, chanel, fechaGrabacion, fechaHoraContacto,
idServidorTelefonia, identificacionCliente, nombreCliente, queue,
tipoIdentificacionCliente, tipoLlamada, uniqueId, documento, fecha,
fechaInicioGestion, casoCrm_id, people_id, usuario_id, departamento,
estadoCivil, fechaAsigna, fechaNac, genero, guionBaseSalida_id,
guionOriginalSalida_id, datocomplementario1, datocomplementario2,
datocomplementario3, datocomplementario4, municipio, primerApellido,
primerNombre, segundoApellido, segundoNombre, telefono1, telefono2,
telefono3, telefono4, tipoDocumento, marcadorLista_id, usuarioAsigna_id,
usuarioAsignado_id, direccion, email, fechaEvento, horaEvento, lugarEvento,
motivo, motivoDescripcion, guionHtml_id, categoriaFormulario, formGuion_id,
null::varchar as categoriaVerificado, null::int8 as formVerificacion_id,
null::varchar as audio, null::int8 as idBase, null::varchar as
identificacion, null::varchar as nombres, null::varchar as autorizaFactura,
null::varchar as celularTutor, null::varchar as ciudadAtencion, null::bool
as consultoEstadoCuenta, null::bool as consultoPlantillaEstado, null::bool
as consultoTickets, null::varchar as descripcion, null::varchar as
detalleTransaccion, null::varchar as errorDetail, null::varchar as
estadoBot, null::varchar as idCalificador, null::varchar as idCredito,
null::varchar as identificacionTutor, null::int4 as
intentosCreacionCasoCosmos, null::varchar as menorEdad, null::varchar as
motivoWSCosmos, null::varchar as motivoWSCosmosNombre, null::varchar as
nombreTutor, null::varchar as numeroTicket, null::varchar as resultWSBPM,
null::bool as resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar
as telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar
as wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id, null::int8
as tipIndisponibilidad_id, null::int8 as directorio_id, enviarSms, 9 as
clazz_ from public.Agendamientocampana union all select id, fechaCreacion,
fechaModificacion, idUsuarioCrea, idUsuarioModifica, agent, agentChannel,
apellidoCliente, callerId, callerIdName, chanel, fechaGrabacion,
fechaHoraContacto, idServidorTelefonia, identificacionCliente,
nombreCliente, queue, tipoIdentificacionCliente, tipoLlamada, uniqueId,
documento, fecha, fechaInicioGestion, casoCrm_id, people_id, usuario_id,
departamento, estadoCivil, fechaAsigna, fechaNac, genero,
guionBaseSalida_id, guionOriginalSalida_id, datocomplementario1,
datocomplementario2, datocomplementario3, datocomplementario4, municipio,
primerApellido, primerNombre, segundoApellido, segundoNombre, telefono1,
telefono2, telefono3, telefono4, tipoDocumento, marcadorLista_id,
usuarioAsigna_id, usuarioAsignado_id, direccion, email, fechaEvento,
horaEvento, lugarEvento, motivo, motivoDescripcion, guionHtml_id,
categoriaFormulario, formGuion_id, null::varchar as categoriaVerificado,
null::int8 as formVerificacion_id, null::varchar as audio, null::int8 as
idBase, null::varchar as identificacion, null::varchar as nombres,
null::varchar as autorizaFactura, null::varchar as celularTutor,
null::varchar as ciudadAtencion, null::bool as consultoEstadoCuenta,
null::bool as consultoPlantillaEstado, null::bool as consultoTickets,
null::varchar as descripcion, null::varchar as detalleTransaccion,
null::varchar as errorDetail, null::varchar as estadoBot, null::varchar as
idCalificador, null::varchar as idCredito, null::varchar as
identificacionTutor, null::int4 as intentosCreacionCasoCosmos,
null::varchar as menorEdad, null::varchar as motivoWSCosmos, null::varchar
as motivoWSCosmosNombre, null::varchar as nombreTutor, null::varchar as
numeroTicket, null::varchar as resultWSBPM, null::bool as
resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar as
telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar as
wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id, null::int8
as tipIndisponibilidad_id, null::int8 as directorio_id, null::bool as
enviarSms, 10 as clazz_ from public.Salida union all select id,
fechaCreacion, fechaModificacion, idUsuarioCrea, idUsuarioModifica, agent,
agentChannel, apellidoCliente, callerId, callerIdName, chanel,
fechaGrabacion, fechaHoraContacto, idServidorTelefonia,
identificacionCliente, nombreCliente, queue, tipoIdentificacionCliente,
tipoLlamada, uniqueId, documento, fecha, fechaInicioGestion, casoCrm_id,
people_id, usuario_id, departamento, estadoCivil, fechaAsigna, fechaNac,
genero, guionBaseSalida_id, guionOriginalSalida_id, datocomplementario1,
datocomplementario2, datocomplementario3, datocomplementario4, municipio,
primerApellido, primerNombre, segundoApellido, segundoNombre, telefono1,
telefono2, telefono3, telefono4, tipoDocumento, marcadorLista_id,
usuarioAsigna_id, usuarioAsignado_id, direccion, email, fechaEvento,
horaEvento, lugarEvento, motivo, motivoDescripcion, guionHtml_id,
null::varchar as categoriaFormulario, null::int8 as formGuion_id,
null::varchar as categoriaVerificado, null::int8 as formVerificacion_id,
null::varchar as audio, null::int8 as idBase, null::varchar as
identificacion, null::varchar as nombres, null::varchar as autorizaFactura,
null::varchar as celularTutor, null::varchar as ciudadAtencion, null::bool
as consultoEstadoCuenta, null::bool as consultoPlantillaEstado, null::bool
as consultoTickets, null::varchar as descripcion, null::varchar as
detalleTransaccion, null::varchar as errorDetail, null::varchar as
estadoBot, null::varchar as idCalificador, null::varchar as idCredito,
null::varchar as identificacionTutor, null::int4 as
intentosCreacionCasoCosmos, null::varchar as menorEdad, null::varchar as
motivoWSCosmos, null::varchar as motivoWSCosmosNombre, null::varchar as
nombreTutor, null::varchar as numeroTicket, null::varchar as resultWSBPM,
null::bool as resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar
as telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar
as wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id,
tipIndisponibilidad_id, null::int8 as directorio_id, null::bool as
enviarSms, 7 as clazz_ from public.Indisponibilidad union all select id,
fechaCreacion, fechaModificacion, idUsuarioCrea, idUsuarioModifica, agent,
agentChannel, apellidoCliente, callerId, callerIdName, chanel,
fechaGrabacion, fechaHoraContacto, idServidorTelefonia,
identificacionCliente, nombreCliente, queue, tipoIdentificacionCliente,
tipoLlamada, uniqueId, documento, fecha, fechaInicioGestion, casoCrm_id,
people_id, usuario_id, departamento, estadoCivil, fechaAsigna, fechaNac,
genero, guionBaseSalida_id, guionOriginalSalida_id, datocomplementario1,
datocomplementario2, datocomplementario3, datocomplementario4, municipio,
primerApellido, primerNombre, segundoApellido, segundoNombre, telefono1,
telefono2, telefono3, telefono4, tipoDocumento, marcadorLista_id,
usuarioAsigna_id, usuarioAsignado_id, direccion, email, fechaEvento,
horaEvento, lugarEvento, motivo, motivoDescripcion, guionHtml_id,
null::varchar as categoriaFormulario, null::int8 as formGuion_id,
null::varchar as categoriaVerificado, null::int8 as formVerificacion_id,
null::varchar as audio, null::int8 as idBase, null::varchar as
identificacion, null::varchar as nombres, null::varchar as autorizaFactura,
null::varchar as celularTutor, null::varchar as ciudadAtencion, null::bool
as consultoEstadoCuenta, null::bool as consultoPlantillaEstado, null::bool
as consultoTickets, null::varchar as descripcion, null::varchar as
detalleTransaccion, null::varchar as errorDetail, null::varchar as
estadoBot, null::varchar as idCalificador, null::varchar as idCredito,
null::varchar as identificacionTutor, null::int4 as
intentosCreacionCasoCosmos, null::varchar as menorEdad, null::varchar as
motivoWSCosmos, null::varchar as motivoWSCosmosNombre, null::varchar as
nombreTutor, null::varchar as numeroTicket, null::varchar as resultWSBPM,
null::bool as resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar
as telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar
as wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id, null::int8
as tipIndisponibilidad_id, directorio_id, null::bool as enviarSms, 8 as
clazz_ from public.PBX union all select id, fechaCreacion,
fechaModificacion, idUsuarioCrea, idUsuarioModifica, agent, agentChannel,
apellidoCliente, callerId, callerIdName, chanel, fechaGrabacion,
fechaHoraContacto, idServidorTelefonia, identificacionCliente,
nombreCliente, queue, tipoIdentificacionCliente, tipoLlamada, uniqueId,
documento, fecha, fechaInicioGestion, casoCrm_id, people_id, usuario_id,
departamento, estadoCivil, fechaAsigna, fechaNac, genero,
guionBaseSalida_id, guionOriginalSalida_id, datocomplementario1,
datocomplementario2, datocomplementario3, datocomplementario4, municipio,
primerApellido, primerNombre, segundoApellido, segundoNombre, telefono1,
telefono2, telefono3, telefono4, tipoDocumento, marcadorLista_id,
usuarioAsigna_id, usuarioAsignado_id, null::varchar as direccion,
null::varchar as email, null::varchar as fechaEvento, null::varchar as
horaEvento, null::varchar as lugarEvento, null::varchar as motivo,
null::varchar as motivoDescripcion, null::int8 as guionHtml_id,
null::varchar as categoriaFormulario, null::int8 as formGuion_id,
null::varchar as categoriaVerificado, null::int8 as formVerificacion_id,
audio, idBase, identificacion, nombres, null::varchar as autorizaFactura,
null::varchar as celularTutor, null::varchar as ciudadAtencion, null::bool
as consultoEstadoCuenta, null::bool as consultoPlantillaEstado, null::bool
as consultoTickets, null::varchar as descripcion, null::varchar as
detalleTransaccion, null::varchar as errorDetail, null::varchar as
estadoBot, null::varchar as idCalificador, null::varchar as idCredito,
null::varchar as identificacionTutor, null::int4 as
intentosCreacionCasoCosmos, null::varchar as menorEdad, null::varchar as
motivoWSCosmos, null::varchar as motivoWSCosmosNombre, null::varchar as
nombreTutor, null::varchar as numeroTicket, null::varchar as resultWSBPM,
null::bool as resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar
as telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar
as wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id, null::int8
as tipIndisponibilidad_id, null::int8 as directorio_id, null::bool as
enviarSms, 5 as clazz_ from public.AudioMensaje )
guionbase1_
cross join public.people peo2_
where
carac0_.guion_id=guionbase1_.id
and carac0_.people=peo2_.id
and guionbase1_.fechaCreacion>='2020-11-01 00:00:00' and
peo2_.identificacion='1234567890'
and (guionbase1_.queue in ('colaA','colaB','colaC')) order by carac0_.id
desc

-------------------
este es el Explain Analyze correspondiente:

Sort  (cost=41899.67..41899.67 rows=1 width=552) (actual
time=6371.293..6371.300 rows=1 loops=1)
  Sort Key: carac0_.id DESC
  Sort Method: quicksort  Memory: 26kB
  ->  Nested Loop  (cost=0.17..41899.67 rows=1 width=552) (actual
time=3829.373..6371.226 rows=1 loops=1)
        Join Filter: (carac0_.guion_id = guionsimpleverificado.id)
        Rows Removed by Join Filter: 2292263
        ->  Nested Loop  (cost=0.17..14.81 rows=1 width=552) (actual
time=0.688..13.310 rows=39 loops=1)
              ->  Index Scan using identificacion_idx on people peo2_
 (cost=0.09..2.29 rows=1 width=8) (actual time=0.302..0.632 rows=2 loops=1)
                    Index Cond: ((identificacion)::text =
'1234567890'::text)
              ->  Index Scan using idx_caracterizacionPantalla_pc2 on
caracterizacionPantalla carac0_  (cost=0.09..12.48 rows=11 width=552)
(actual time=0.435..6.290 rows=20 loops=2)
                    Index Cond: (people = peo2_.id)
        ->  Append  (cost=0.00..41211.14 rows=79261 width=18281) (actual
time=0.111..158.895 rows=58776 loops=39)
              ->  Seq Scan on guionsimpleverificado  (cost=0.00..10.00
rows=1 width=22153) (actual time=0.001..0.001 rows=0 loops=39)
                    Filter: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
              ->  Subquery Scan on "*SELECT* 2"  (cost=0.09..39814.69
rows=79251 width=9238) (actual time=0.109..149.464 rows=58775 loops=39)
                    ->  Index Scan using idx_entrada_comp3 on entrada
 (cost=0.09..39497.68 rows=79251 width=9378) (actual time=0.107..126.303
rows=58775 loops=39)
                          Index Cond: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
              ->  Seq Scan on agendamientocampana  (cost=0.00..10.00 rows=1
width=21669) (actual time=0.001..0.001 rows=0 loops=39)
                    Filter: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
              ->  Index Scan using idx_salida_comp3 on salida
 (cost=0.08..367.28 rows=5 width=7581) (actual time=1.479..1.479 rows=0
loops=39)
                    Index Cond: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
              ->  Seq Scan on indisponibilidad  (cost=0.00..1.01 rows=1
width=21185) (actual time=0.004..0.004 rows=0 loops=39)
                    Filter: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
                    Rows Removed by Filter: 1
              ->  Index Scan using idx_pbx_comp2 on pbx  (cost=0.08..29.08
rows=1 width=14118) (actual time=0.044..0.100 rows=1 loops=39)
                    Index Cond: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
              ->  Subquery Scan on "*SELECT* 7"  (cost=0.08..820.54 rows=1
width=14205) (actual time=3.557..3.557 rows=0 loops=39)
                    ->  Index Scan using idx_audiomensaje_comp3 on
audiomensaje  (cost=0.08..820.53 rows=1 width=14205) (actual
time=3.556..3.556 rows=0 loops=39)
                          Index Cond: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
Planning Time: 2.152 ms
Execution Time: 6371.748 ms


-----------------------
Reescribir la consulta para evitar que el haga el union sobre todo los
registros  las tablas y luego si filtrar, la consulta quedaría asi:


select carac0_.id as id10_, carac0_.guion_id as guion13_10_,
carac0_.nombreClase as nombreCl3_10_, carac0_.nombreGuion as nombreGu4_10_,
carac0_.observaciones as observac5_10_, carac0_.people as persona14_10_,
carac0_.tipificacion_id as tipific15_10_, carac0_.uniqueid as uniqueid10_,
carac0_.usuarioGestionaId as usuarioG7_10_, carac0_.fechaRemarcacion as
fechaRem8_10_, carac0_.numeroIntento as numeroIn9_10_, carac0_.prioridad as
prioridad10_, carac0_.telefonoActivo as telefon11_10_,
carac0_.telefonoRemarcacion as telefon12_10_, carac0_.DTYPE as DTYPE10_
from public.caracterizacionPantalla carac0_
join public.people peo2_ on carac0_.people=peo2_.id  and
peo2_.identificacion='1234567890'
join lateral (
    select id, fechaCreacion, fechaModificacion, idUsuarioCrea,
idUsuarioModifica, agent, agentChannel, apellidoCliente, callerId,
callerIdName, chanel, fechaGrabacion, fechaHoraContacto,
idServidorTelefonia, identificacionCliente, nombreCliente, queue,
tipoIdentificacionCliente, tipoLlamada, uniqueId, documento, fecha,
fechaInicioGestion, casoCrm_id, people_id, usuario_id, departamento,
estadoCivil, fechaAsigna, fechaNac, genero, guionBaseSalida_id,
guionOriginalSalida_id, datocomplementario1, datocomplementario2,
datocomplementario3, datocomplementario4, municipio, primerApellido,
primerNombre, segundoApellido, segundoNombre, telefono1, telefono2,
telefono3, telefono4, tipoDocumento, marcadorLista_id, usuarioAsigna_id,
usuarioAsignado_id, direccion, email, fechaEvento, horaEvento, lugarEvento,
motivo, motivoDescripcion, guionHtml_id, categoriaFormulario, formGuion_id,
categoriaVerificado, formVerificacion_id, null::varchar as audio,
null::int8 as idBase, null::varchar as identificacion, null::varchar as
nombres, null::varchar as autorizaFactura, null::varchar as celularTutor,
null::varchar as ciudadAtencion, null::bool as consultoEstadoCuenta,
null::bool as consultoPlantillaEstado, null::bool as consultoTickets,
null::varchar as descripcion, null::varchar as detalleTransaccion,
null::varchar as errorDetail, null::varchar as estadoBot, null::varchar as
idCalificador, null::varchar as idCredito, null::varchar as
identificacionTutor, null::int4 as intentosCreacionCasoCosmos,
null::varchar as menorEdad, null::varchar as motivoWSCosmos, null::varchar
as motivoWSCosmosNombre, null::varchar as nombreTutor, null::varchar as
numeroTicket, null::varchar as resultWSBPM, null::bool as
resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar as
telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar as
wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id, null::int8
as tipIndisponibilidad_id, null::int8 as directorio_id, null::bool as
enviarSms, 4 as clazz_
     from public.GuionSimpleVerificado where carac0_.guion_id=id  union all
select id, fechaCreacion, fechaModificacion, idUsuarioCrea,
idUsuarioModifica, agent, agentChannel, apellidoCliente, callerId,
callerIdName, chanel, fechaGrabacion, fechaHoraContacto,
idServidorTelefonia, identificacionCliente, nombreCliente, queue,
tipoIdentificacionCliente, tipoLlamada, uniqueId, documento, fecha,
fechaInicioGestion, casoCrm_id, people_id, usuario_id, departamento,
estadoCivil, fechaAsigna, fechaNac, genero, guionBaseSalida_id,
guionOriginalSalida_id, datocomplementario1, datocomplementario2,
datocomplementario3, datocomplementario4, municipio, primerApellido,
primerNombre, segundoApellido, segundoNombre, telefono1, telefono2,
telefono3, telefono4, tipoDocumento, marcadorLista_id, usuarioAsigna_id,
usuarioAsignado_id, direccion, email, fechaEvento, horaEvento, lugarEvento,
motivo, motivoDescripcion, guionHtml_id, categoriaFormulario, formGuion_id,
null::varchar as categoriaVerificado, null::int8 as formVerificacion_id,
null::varchar as audio, null::int8 as idBase, null::varchar as
identificacion, null::varchar as nombres, autorizaFactura, celularTutor,
ciudadAtencion, consultoEstadoCuenta, consultoPlantillaEstado,
consultoTickets, descripcion, detalleTransaccion, errorDetail, estadoBot,
idCalificador, idCredito, identificacionTutor, intentosCreacionCasoCosmos,
menorEdad, motivoWSCosmos, motivoWSCosmosNombre, nombreTutor, numeroTicket,
resultWSBPM, resultadoWSCosmos, smsOutboundId, telefonoTutor,
tipoIdentificacionTutor, wsTipBotResult, canalAtencion_id,
tipEscalamiento_id, tipoBotInputData_id, tipoCanalWsCosmos_id,
tipoCliente_id, twitterConversacion_idInvitado, twitterTweet_id, null::int8
as tipIndisponibilidad_id, null::int8 as directorio_id, null::bool as
enviarSms, 6 as clazz_
     from public.Entrada where carac0_.guion_id=id union all select id,
fechaCreacion, fechaModificacion, idUsuarioCrea, idUsuarioModifica, agent,
agentChannel, apellidoCliente, callerId, callerIdName, chanel,
fechaGrabacion, fechaHoraContacto, idServidorTelefonia,
identificacionCliente, nombreCliente, queue, tipoIdentificacionCliente,
tipoLlamada, uniqueId, documento, fecha, fechaInicioGestion, casoCrm_id,
people_id, usuario_id, departamento, estadoCivil, fechaAsigna, fechaNac,
genero, guionBaseSalida_id, guionOriginalSalida_id, datocomplementario1,
datocomplementario2, datocomplementario3, datocomplementario4, municipio,
primerApellido, primerNombre, segundoApellido, segundoNombre, telefono1,
telefono2, telefono3, telefono4, tipoDocumento, marcadorLista_id,
usuarioAsigna_id, usuarioAsignado_id, direccion, email, fechaEvento,
horaEvento, lugarEvento, motivo, motivoDescripcion, guionHtml_id,
categoriaFormulario, formGuion_id, null::varchar as categoriaVerificado,
null::int8 as formVerificacion_id, null::varchar as audio, null::int8 as
idBase, null::varchar as identificacion, null::varchar as nombres,
null::varchar as autorizaFactura, null::varchar as celularTutor,
null::varchar as ciudadAtencion, null::bool as consultoEstadoCuenta,
null::bool as consultoPlantillaEstado, null::bool as consultoTickets,
null::varchar as descripcion, null::varchar as detalleTransaccion,
null::varchar as errorDetail, null::varchar as estadoBot, null::varchar as
idCalificador, null::varchar as idCredito, null::varchar as
identificacionTutor, null::int4 as intentosCreacionCasoCosmos,
null::varchar as menorEdad, null::varchar as motivoWSCosmos, null::varchar
as motivoWSCosmosNombre, null::varchar as nombreTutor, null::varchar as
numeroTicket, null::varchar as resultWSBPM, null::bool as
resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar as
telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar as
wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id, null::int8
as tipIndisponibilidad_id, null::int8 as directorio_id, enviarSms, 9 as
clazz_
     from public.Agendamientocampana where carac0_.guion_id=id union all
select id, fechaCreacion, fechaModificacion, idUsuarioCrea,
idUsuarioModifica, agent, agentChannel, apellidoCliente, callerId,
callerIdName, chanel, fechaGrabacion, fechaHoraContacto,
idServidorTelefonia, identificacionCliente, nombreCliente, queue,
tipoIdentificacionCliente, tipoLlamada, uniqueId, documento, fecha,
fechaInicioGestion, casoCrm_id, people_id, usuario_id, departamento,
estadoCivil, fechaAsigna, fechaNac, genero, guionBaseSalida_id,
guionOriginalSalida_id, datocomplementario1, datocomplementario2,
datocomplementario3, datocomplementario4, municipio, primerApellido,
primerNombre, segundoApellido, segundoNombre, telefono1, telefono2,
telefono3, telefono4, tipoDocumento, marcadorLista_id, usuarioAsigna_id,
usuarioAsignado_id, direccion, email, fechaEvento, horaEvento, lugarEvento,
motivo, motivoDescripcion, guionHtml_id, categoriaFormulario, formGuion_id,
null::varchar as categoriaVerificado, null::int8 as formVerificacion_id,
null::varchar as audio, null::int8 as idBase, null::varchar as
identificacion, null::varchar as nombres, null::varchar as autorizaFactura,
null::varchar as celularTutor, null::varchar as ciudadAtencion, null::bool
as consultoEstadoCuenta, null::bool as consultoPlantillaEstado, null::bool
as consultoTickets, null::varchar as descripcion, null::varchar as
detalleTransaccion, null::varchar as errorDetail, null::varchar as
estadoBot, null::varchar as idCalificador, null::varchar as idCredito,
null::varchar as identificacionTutor, null::int4 as
intentosCreacionCasoCosmos, null::varchar as menorEdad, null::varchar as
motivoWSCosmos, null::varchar as motivoWSCosmosNombre, null::varchar as
nombreTutor, null::varchar as numeroTicket, null::varchar as resultWSBPM,
null::bool as resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar
as telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar
as wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id, null::int8
as tipIndisponibilidad_id, null::int8 as directorio_id, null::bool as
enviarSms, 10 as clazz_
     from public.Salida where carac0_.guion_id=id union all select id,
fechaCreacion, fechaModificacion, idUsuarioCrea, idUsuarioModifica, agent,
agentChannel, apellidoCliente, callerId, callerIdName, chanel,
fechaGrabacion, fechaHoraContacto, idServidorTelefonia,
identificacionCliente, nombreCliente, queue, tipoIdentificacionCliente,
tipoLlamada, uniqueId, documento, fecha, fechaInicioGestion, casoCrm_id,
people_id, usuario_id, departamento, estadoCivil, fechaAsigna, fechaNac,
genero, guionBaseSalida_id, guionOriginalSalida_id, datocomplementario1,
datocomplementario2, datocomplementario3, datocomplementario4, municipio,
primerApellido, primerNombre, segundoApellido, segundoNombre, telefono1,
telefono2, telefono3, telefono4, tipoDocumento, marcadorLista_id,
usuarioAsigna_id, usuarioAsignado_id, direccion, email, fechaEvento,
horaEvento, lugarEvento, motivo, motivoDescripcion, guionHtml_id,
null::varchar as categoriaFormulario, null::int8 as formGuion_id,
null::varchar as categoriaVerificado, null::int8 as formVerificacion_id,
null::varchar as audio, null::int8 as idBase, null::varchar as
identificacion, null::varchar as nombres, null::varchar as autorizaFactura,
null::varchar as celularTutor, null::varchar as ciudadAtencion, null::bool
as consultoEstadoCuenta, null::bool as consultoPlantillaEstado, null::bool
as consultoTickets, null::varchar as descripcion, null::varchar as
detalleTransaccion, null::varchar as errorDetail, null::varchar as
estadoBot, null::varchar as idCalificador, null::varchar as idCredito,
null::varchar as identificacionTutor, null::int4 as
intentosCreacionCasoCosmos, null::varchar as menorEdad, null::varchar as
motivoWSCosmos, null::varchar as motivoWSCosmosNombre, null::varchar as
nombreTutor, null::varchar as numeroTicket, null::varchar as resultWSBPM,
null::bool as resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar
as telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar
as wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id,
tipIndisponibilidad_id, null::int8 as directorio_id, null::bool as
enviarSms, 7 as clazz_
     from public.Indisponibilidad where carac0_.guion_id=id union all
select id, fechaCreacion, fechaModificacion, idUsuarioCrea,
idUsuarioModifica, agent, agentChannel, apellidoCliente, callerId,
callerIdName, chanel, fechaGrabacion, fechaHoraContacto,
idServidorTelefonia, identificacionCliente, nombreCliente, queue,
tipoIdentificacionCliente, tipoLlamada, uniqueId, documento, fecha,
fechaInicioGestion, casoCrm_id, people_id, usuario_id, departamento,
estadoCivil, fechaAsigna, fechaNac, genero, guionBaseSalida_id,
guionOriginalSalida_id, datocomplementario1, datocomplementario2,
datocomplementario3, datocomplementario4, municipio, primerApellido,
primerNombre, segundoApellido, segundoNombre, telefono1, telefono2,
telefono3, telefono4, tipoDocumento, marcadorLista_id, usuarioAsigna_id,
usuarioAsignado_id, direccion, email, fechaEvento, horaEvento, lugarEvento,
motivo, motivoDescripcion, guionHtml_id, null::varchar as
categoriaFormulario, null::int8 as formGuion_id, null::varchar as
categoriaVerificado, null::int8 as formVerificacion_id, null::varchar as
audio, null::int8 as idBase, null::varchar as identificacion, null::varchar
as nombres, null::varchar as autorizaFactura, null::varchar as
celularTutor, null::varchar as ciudadAtencion, null::bool as
consultoEstadoCuenta, null::bool as consultoPlantillaEstado, null::bool as
consultoTickets, null::varchar as descripcion, null::varchar as
detalleTransaccion, null::varchar as errorDetail, null::varchar as
estadoBot, null::varchar as idCalificador, null::varchar as idCredito,
null::varchar as identificacionTutor, null::int4 as
intentosCreacionCasoCosmos, null::varchar as menorEdad, null::varchar as
motivoWSCosmos, null::varchar as motivoWSCosmosNombre, null::varchar as
nombreTutor, null::varchar as numeroTicket, null::varchar as resultWSBPM,
null::bool as resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar
as telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar
as wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id, null::int8
as tipIndisponibilidad_id, directorio_id, null::bool as enviarSms, 8 as
clazz_
     from public.PBX where carac0_.guion_id=id union all select id,
fechaCreacion, fechaModificacion, idUsuarioCrea, idUsuarioModifica, agent,
agentChannel, apellidoCliente, callerId, callerIdName, chanel,
fechaGrabacion, fechaHoraContacto, idServidorTelefonia,
identificacionCliente, nombreCliente, queue, tipoIdentificacionCliente,
tipoLlamada, uniqueId, documento, fecha, fechaInicioGestion, casoCrm_id,
people_id, usuario_id, departamento, estadoCivil, fechaAsigna, fechaNac,
genero, guionBaseSalida_id, guionOriginalSalida_id, datocomplementario1,
datocomplementario2, datocomplementario3, datocomplementario4, municipio,
primerApellido, primerNombre, segundoApellido, segundoNombre, telefono1,
telefono2, telefono3, telefono4, tipoDocumento, marcadorLista_id,
usuarioAsigna_id, usuarioAsignado_id, null::varchar as direccion,
null::varchar as email, null::varchar as fechaEvento, null::varchar as
horaEvento, null::varchar as lugarEvento, null::varchar as motivo,
null::varchar as motivoDescripcion, null::int8 as guionHtml_id,
null::varchar as categoriaFormulario, null::int8 as formGuion_id,
null::varchar as categoriaVerificado, null::int8 as formVerificacion_id,
audio, idBase, identificacion, nombres, null::varchar as autorizaFactura,
null::varchar as celularTutor, null::varchar as ciudadAtencion, null::bool
as consultoEstadoCuenta, null::bool as consultoPlantillaEstado, null::bool
as consultoTickets, null::varchar as descripcion, null::varchar as
detalleTransaccion, null::varchar as errorDetail, null::varchar as
estadoBot, null::varchar as idCalificador, null::varchar as idCredito,
null::varchar as identificacionTutor, null::int4 as
intentosCreacionCasoCosmos, null::varchar as menorEdad, null::varchar as
motivoWSCosmos, null::varchar as motivoWSCosmosNombre, null::varchar as
nombreTutor, null::varchar as numeroTicket, null::varchar as resultWSBPM,
null::bool as resultadoWSCosmos, null::int8 as smsOutboundId, null::varchar
as telefonoTutor, null::varchar as tipoIdentificacionTutor, null::varchar
as wsTipBotResult, null::int8 as canalAtencion_id, null::int8 as
tipEscalamiento_id, null::int8 as tipoBotInputData_id, null::int8 as
tipoCanalWsCosmos_id, null::int8 as tipoCliente_id, null::int8 as
twitterConversacion_idInvitado, null::int8 as twitterTweet_id, null::int8
as tipIndisponibilidad_id, null::int8 as directorio_id, null::bool as
enviarSms, 5 as clazz_
     from public.AudioMensaje where carac0_.guion_id=id
     ) guionbase1_ on carac0_.guion_id=guionbase1_.id
where
guionbase1_.fechaCreacion>='2020-11-01 00:00:00'
and (guionbase1_.queue in ('colaA','colaB','colaC'))
order by carac0_.id desc

---------------------------
El Explain Analyze correspondiente:

Sort  (cost=29.47..29.47 rows=1 width=552) (actual time=28.464..28.467
rows=1 loops=1)
  Sort Key: carac0_.id DESC
  Sort Method: quicksort  Memory: 26kB
  ->  Nested Loop  (cost=0.20..29.47 rows=1 width=552) (actual
time=18.396..28.458 rows=1 loops=1)
        ->  Nested Loop  (cost=0.17..14.81 rows=1 width=552) (actual
time=0.791..8.255 rows=39 loops=1)
              ->  Index Scan using identificacion_idx on people peo2_
 (cost=0.09..2.29 rows=1 width=8) (actual time=0.302..0.334 rows=2 loops=1)
                    Index Cond: ((identificacion)::text =
'1234567890'::text)
              ->  Index Scan using idx_caracterizacionPantalla_pc2 on
caracterizacionPantalla carac0_  (cost=0.09..12.48 rows=11 width=552)
(actual time=0.404..3.935 rows=20 loops=2)
                    Index Cond: (people = peo2_.id)
        ->  Subquery Scan on guionbase1_  (cost=0.03..14.66 rows=1 width=8)
(actual time=0.511..0.517 rows=0 loops=39)
              Filter: (carac0_.guion_id = guionbase1_.id)
              ->  Append  (cost=0.03..14.63 rows=7 width=18281) (actual
time=0.510..0.515 rows=0 loops=39)
                    ->  Index Scan using guionsimpleverificado_pkey on
guionsimpleverificado  (cost=0.03..2.23 rows=1 width=22153) (actual
time=0.002..0.002 rows=0 loops=39)
                          Index Cond: (carac0_.guion_id = id)
                          Filter: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
                    ->  Subquery Scan on "*SELECT* 2"  (cost=0.09..2.30
rows=1 width=9238) (actual time=0.415..0.415 rows=0 loops=39)
                          ->  Index Scan using idx_entrada_comp4 on entrada
 (cost=0.09..2.29 rows=1 width=9378) (actual time=0.415..0.415 rows=0
loops=39)
                                Index Cond: (carac0_.guion_id = id)
                                Filter: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
                                Rows Removed by Filter: 1
                    ->  Index Scan using agendamientocampana_pkey on
agendamientocampana  (cost=0.03..2.23 rows=1 width=21669) (actual
time=0.002..0.002 rows=0 loops=39)
                          Index Cond: (carac0_.guion_id = id)
                          Filter: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
                    ->  Index Scan using salida_pkey on salida
 (cost=0.06..2.27 rows=1 width=7581) (actual time=0.029..0.029 rows=0
loops=39)
                          Index Cond: (carac0_.guion_id = id)
                          Filter: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
                    ->  Seq Scan on indisponibilidad  (cost=0.00..1.01
rows=1 width=21185) (actual time=0.003..0.003 rows=0 loops=39)
                          Filter: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND (carac0_.guion_id = id) AND
((queue)::text = ANY ('{colaA,colaB,colaC}'::text[])))
                          Rows Removed by Filter: 1
                    ->  Index Scan using pbx_pkey on pbx  (cost=0.06..2.26
rows=1 width=14118) (actual time=0.029..0.029 rows=0 loops=39)
                          Index Cond: (carac0_.guion_id = id)
                          Filter: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
                    ->  Subquery Scan on "*SELECT* 7"  (cost=0.08..2.30
rows=1 width=14205) (actual time=0.028..0.028 rows=0 loops=39)
                          ->  Index Scan using audiomensaje_pkey on
audiomensaje  (cost=0.08..2.29 rows=1 width=14205) (actual
time=0.028..0.028 rows=0 loops=39)
                                Index Cond: (carac0_.guion_id = id)
                                Filter: ((fechacreacion >= '2020-11-01
00:00:00'::timestamp without time zone) AND ((queue)::text = ANY
('{colaA,colaB,colaC}'::text[])))
Planning Time: 2.976 ms
Execution Time: 28.806 ms


El asunto es que la consulta reescrita no es posible  implementarla en el
software (por esta en Hibernate),  como se puede indicar al optimizador que
realice filtro sobre los ID antes que  la union, como si lo hace
por fechacreacion y queue

de antemano muchas gracias!!!

-- 
Cordialmente,

Ing. Hellmuth I. Vargas S.

Reply via email to