Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/10/2012, 13:52
Avatar de jlct
jlct
 
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años, 7 meses
Puntos: 19
Situacion anormal al eliminar registros

Buenas tardes amigos de FDW una vez mas estoy aqui requiriendo de su ayuda sobre una situacion anormal que me esta pasando al tratar de eliminar registros de una tabla.

pasa lo siguiente tengo esta tabla:

Código:
-- Table: inventario.tmovimiento_inv

-- DROP TABLE inventario.tmovimiento_inv;

CREATE TABLE inventario.tmovimiento_inv
(
  nid_inventario numeric NOT NULL DEFAULT nextval('inventario.sec_inventario'::regclass),
  nmovimiento numeric NOT NULL,
  nfecha date,
  nid_tipo_operacion numeric NOT NULL,
  ndocumento numeric,
  nfecha_doc date,
  cobservacion character varying(255),
  nid_clientes numeric,
  nguia numeric,
  nid_dias numeric NOT NULL,
  nid_sucursal numeric NOT NULL,
  nano smallint,
  CONSTRAINT tmovimiento_inv_pkey PRIMARY KEY (nid_inventario),
  CONSTRAINT fk_client FOREIGN KEY (nid_clientes)
      REFERENCES ventas.tclientes (nid_clientes) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE NO ACTION,
  CONSTRAINT fk_dias FOREIGN KEY (nid_dias)
      REFERENCES general.tdias (nid_dias) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE NO ACTION,
  CONSTRAINT fk_inventario_sucursal FOREIGN KEY (nid_sucursal)
      REFERENCES general.tsucursales (nid_sucursal) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE NO ACTION,
  CONSTRAINT fk_tipo_operacion FOREIGN KEY (nid_tipo_operacion)
      REFERENCES inventario.ttipo_operacion (nid_tipo_operacion) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE inventario.tmovimiento_inv OWNER TO iancarina;

-- Trigger: tg_inventario_tmovimiento_inv on inventario.tmovimiento_inv

-- DROP TRIGGER tg_inventario_tmovimiento_inv ON inventario.tmovimiento_inv;

CREATE TRIGGER tg_inventario_tmovimiento_inv
  AFTER DELETE
  ON inventario.tmovimiento_inv
  FOR EACH STATEMENT
  EXECUTE PROCEDURE inventario.fn_establecer_secuencia_movimiento_inv();
y esta:

Código:
-- Table: inventario.tdetalle_movimiento_inv

-- DROP TABLE inventario.tdetalle_movimiento_inv;

CREATE TABLE inventario.tdetalle_movimiento_inv
(
  nid_inventario numeric NOT NULL,
  cid_productos character varying(20) NOT NULL,
  ncantidad numeric NOT NULL,
  nid_planta numeric NOT NULL,
  nid_sucursal numeric NOT NULL,
  nid_detalle_inventario numeric NOT NULL DEFAULT nextval('inventario.sec_detalle_inventario'::regclass),
  CONSTRAINT fk_inventario FOREIGN KEY (nid_inventario)
      REFERENCES inventario.tmovimiento_inv (nid_inventario) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT fk_inventario_sucursal FOREIGN KEY (nid_sucursal)
      REFERENCES general.tsucursales (nid_sucursal) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE NO ACTION,
  CONSTRAINT fk_planta FOREIGN KEY (nid_planta)
      REFERENCES inventario.tplanta (nid_planta) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE NO ACTION,
  CONSTRAINT fk_productos FOREIGN KEY (cid_productos)
      REFERENCES general.tproductos (cid_productos) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE inventario.tdetalle_movimiento_inv OWNER TO iancarina;

-- Trigger: tg_establecer_secuencia_detalle_movimiento_inv on inventario.tdetalle_movimiento_inv

-- DROP TRIGGER tg_establecer_secuencia_detalle_movimiento_inv ON inventario.tdetalle_movimiento_inv;

CREATE TRIGGER tg_establecer_secuencia_detalle_movimiento_inv
  AFTER DELETE
  ON inventario.tdetalle_movimiento_inv
  FOR EACH STATEMENT
  EXECUTE PROCEDURE inventario.fn_establecer_secuencia_detalle_movimiento_inv();

-- Trigger: tg_validar_idinventario on inventario.tdetalle_movimiento_inv

-- DROP TRIGGER tg_validar_idinventario ON inventario.tdetalle_movimiento_inv;

CREATE TRIGGER tg_validar_idinventario
  BEFORE INSERT
  ON inventario.tdetalle_movimiento_inv
  FOR EACH ROW
  EXECUTE PROCEDURE inventario.validar_idinventario();
estoy ejecutando la siguiente instruccion

Delete from inventario.tmovimiento_inv where nano = 2010

pero el proceso de ejecucion tardo excesivamente hasta la ultima ejecucion llevaba mas de 3 horas. (A eso me refiero con situacion anormal)

pero si ejecuto esta instruccion

Delete from inventario.tdetalle_movimiento_inv where nid_inventario between 55496 and 95678

no llega a los 2 segundos.

Nota: la tabla tmovimiento_inv en ese año posee 44759 registros. y la tabla tdetalle_movimiento_inv en ese año posee 414593 registros.

No se que debo hacer para solucionar este problema. espero alguien me pueda ayudar.