Hola Enrique
la tabla tiene la siguiente definición

create table comprobante
(
   id bigserial not null,
   num_ruc varchar(11) not null,
   num_comprobante bigint not null,
   fecha date not null,
   monto numeric(10,2),
   estatus char(1) not null, -- 0 anulado, 1 activo
   primary key(id),
   unique (num_ruc, num_comprobante)
);
para buscar rápidamente un cliente tenemos el siguiente índice
create index idx_num_ruc on comprobante(num_ruc);

Cuando se establece la relación comercial el estado(GOB) nos envía el
histórico de los comprobantes del cliente para cuando se realicen
ciertas operaciones se pueda validar el estatus, la fecha y el monto.

Ciertamente para eliminar un cliente se puede usar *delete from comprobante
where num_ruc='999999' *pero mensualmente se asocian o se van entre 100 a
200 clientes y
el delete se vuelve lento para borrar millones de registros, es un
procedimiento que requiere autorización y registro de auditoría.

Se decidió no borrar ya que creaba mucho I/O en el disco que afecta el
desempeño del sistema, ahora esa tabla va por los 2mil millones y sigue
creciendo.




El mar, 26 sept 2023 a las 16:11, Enrique Herrera Noya (<
enrique.herreran...@gmail.com>) escribió:

>
> veamos si te entiendo
> tienes por un lado *num_ruc *y por otro
> *num_comqrobante *
>
> y la clave primaria la creas concatenando  *cla**pri = 
> num_ruc.**num_comprobante
> *
>
> como el numero de comprobante siempre es mayor el mas reciente puedes
> determinar desde que año quieres borrar basándote en el correlativo
>
> ahora bien si quiere borrar todo lo relacionado a un cliente, bastaría
> usar una condición donde *cla**pri** sea menor a 
> **num_ruc.**num_ultimocomprobante
> *y que ademas *num_ruc **= num_rucaborrar *, de esta forma usas la clave
> primaria lo que sera mas rápido que usar en la sentencia solo *num_ruc *que
> no es clave primaria
>
>
>
>
> El 26-09-23 a las 12:11, Jairo Graterón escribió:
>
> Saludos lista
>
> Tengo un requerimiento sobre liberar el espacio ocupado por registros de
> ventas de
> los clientes que ya no tienen relación comercial con nosotros.
>
> Actualmente la tabla *comprobantes *tiene 2mil millones de registros,
> debido a que
> tiene registros de históricos de ventas proporcionados por el estado para
> controlar
> la emisión única de comprobantes.
>
> Cada cliente tiene su identificador único *num_ruc* junto con el número
> de comprobante es la clave primaria.
>
> Hacer un *delete from comprobantes where num_ruc='xxx'* no es óptimo ya
> que es lento y el espacio no se recupera en el disco, usamos servicios en
> la nube y cobran por espacio ocupado.
>
> Así que me gustaría sus experiencias si han implementado particionamiento
> de tablas ya que veo que no es necesario hacer delete sino drop table.
>
> Haciendo cálculos tendríamos la tabla maestra y 8mil tablas relacionadas
> por cada cliente asociado.
>
>
> Enrique Herrera Noya
> --
> +56 992303151
> Red Hat Certified Engineer RHCE Nº100223072 (RH6.0)
> Red Hat Certified System Administrato RHCSA Nº100223072 (RH6.0)
> Red Hat Certified Technician (RHCT) Nº605010753835478 (RH5.0)
> Novell Certified Linux Professional CLP 10
> Red Hat Delivery Specialist -Container Platform Application Deployment I
> Red Hat Delivery Specialist - Container Platform Administration I
> RED HAT SPECIALIST
> How to Sell Red Hat OpenShift for Infrastructure
> How to Sell Red Hat OpenShift for Developers
> Red Hat Sales Engineer Specialist - Container Platform
> Red Hat Sales Engineer Specialist – Automation
>
>

Reply via email to