I am having a function which delete more than 1000000 record it takes around 1 min.
CREATE OR REPLACE FUNCTION DeleteRecord (cmpId integer)
RETURNS boolean AS
$BODY$
DECLARE cmpId INTEGER DEFAULT 0;
DECLARE counter INTEGER := 1 ;
DECLARE batch INTEGER := 0 ;
DECLARE batchSize INTEGER :=50000 ;
BEGIN
SELECT count(*)/batchSize INTO batch FROM department WHERE cmpId= cmpId;
WHILE counter <= batch + 1 LOOP
DELETE FROM department WHERE deptId IN ( SELECT deptId FROM
department WHERE cmpId = cmpId limit batchSize);
RAISE NOTICE 'Counter: %', counter;
counter := counter + 1 ;
END LOOP ;
counter := 1 ;
SELECT count(*)/batchSize INTO batch FROM employee WHERE cmpId = cmpId;
WHILE counter <= batch + 1 LOOP
DELETE FROM empoyee WHERE empId IN ( SELECT empId FROM
employee WHERE cmpId = cmpId limit batchSize);
RAISE NOTICE 'Counter: %', counter;
counter := counter + 1 ;
END LOOP ;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION DeleteRecord(integer)
OWNER TO postgres;
Department table holds 500000 record for cmpId
Employee table hold more 500000 records for cmpId
I tried to delete with simple delete also but it took more than 1 min.
I found one link How do I speed up deletes from a large database table?
which tells to do delete operation in batch.
But it does helps more time reduced to by just 2 to 3 sec.