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 > >