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.