Oracle - Partición Oracle

 
Vista:

Partición Oracle

Publicado por Doom (1 intervención) el 05/09/2018 01:31:56
Buenas Tardes a Todos.

Espero me puedan apoyar a encontrara la mejor solución al siguiente problema.

Dentro de un proyecto manejamos diversas tablas una de ellas almacena aproximadamente de 4 a 8 millones de registros y debido al uso frecuente del sistema nos piden que cualquier query ejecutado hacia esa tabla no debe sobrepasar el segundo de ejecución.

Actualmente diversos queries sobrepasa ese umbral por lo que varias personas me han recomendado hacer una petición a la tabla.

La tabla cuenta con 20 columnas,:

Ejemplo:

id_sucursal
codigo_gerente
codigo_cliente
codigo_tipo_cliente
status_contacto
id_producto
desc_producto
fh_compra
fh_pago
fh_alert


4 de ellas fueron tomadas para un UNIQUE INDEX,
ejemplo:

id_sucursal
codigo_gerente
codigo_cliente
codigo_tipo_cliente


uno de los queries están estructurados de la siguiente forma

SELECT * FROM T WHERE id_sucursal = ? AND (fh_alert BETWEEN TO_DATE(?, 'YYYY-MM-DD') AND TO_DATE(?, 'YYYY-MM-DD')) ORDER BY status_contacto, codigo_tipo_cliente, fh_alert, codigo_cliente;

El query mostrado al parecer genera un alto consumo por el uso del between aprox de 4.5s, sin el between reduce a menos de 1s, por ello nos recomendaron el particionamiento por la columna fh_alert, pero sin embargo la fecha de esta columna es la misma para todos lo registros de la tabla.

Espero y me puedan dar sugerencias sobre cómo reducir el tiempo.

Saludos !
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Partición Oracle

Publicado por Rafael (328 intervenciones) el 05/09/2018 08:33:55
Hola

Tu problema es un poco raro ...
Dices:
"El query mostrado al parecer genera un alto consumo por el uso del between aprox de 4.5s, sin el between reduce a menos de 1s, por ello nos recomendaron el particionamiento por la columna fh_alert, pero sin embargo la fecha de esta columna es la misma para todos lo registros de la tabla"

Luego entonces me surgen un par de dudas:

1. Si todos los registros tienen la misma fh_alert para que haces un query buscando un rango de fechas si todos tienen la misma, vaya la logica es que te devolvera todos los registros si dicha fecha esta en el rango, y si no esta devolverá cero registros.

2. ¿Tienes un explain plan de dicha consulta? Como sea aun y cuando no lo tengas has probado poner un indice por id_sucursal y fh_alert?

A mi parecer aun con 8 millones de registros no deberia tardar mucho si la tabla esta bien indexada, pero insisto si TODA tu informacion tiene el mismo dato en el mismo campo que aporta dicho campo?

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antonio
Val: 42
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Partición Oracle

Publicado por Antonio (13 intervenciones) el 14/11/2018 16:04:40
Coincido contigo Rafael, esa es una consulta muy simple, la única demora que pudiera tener es por faltarle algún índice por id_sucursal y fh_alert. Al igual que en lo que dice Doom que en su tabla todas las fechas son iguales, entonces para que necesita un campo fecha.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar