No popopo.
El tiempo que pones en el rpimer post es un tiempo exagerado y 235772 no es un numero de registros grande para postgresql.
Te recomiendo indagar un poco acerca de como medir la actividad que tiene postgresql en este momento y lo que está pasando.
Para unificar ideas te cuento que hice para probar esto:
1. Crear la función:
Código sql:
Ver originalCREATE OR REPLACE FUNCTION insertar_registros()
RETURNS NUMERIC AS
$BODY$
DECLARE
i INTEGER;
a DOUBLE PRECISION;
BEGIN
a:=1;
i:=500000;
FOR cont IN 1..i loop
INSERT INTO tabla VALUES(a,now(),'daniel');
a:=a+1;
END loop;
RETURN 23;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
Como ves, la variable i tiene asignado el 500000 (Numero de registros) y en un loop realiza las inserciones correspondientes.
2. Ejecución de la función:
Código sql:
Ver originalpruebas=> SELECT insertar_registros();
insertar_registros
--------------
23
(1 fila)
pruebas=> SELECT COUNT(*) FROM tabla;
COUNT
--------
500000
(1 fila)
El 23 se retorna cuando termina exitosamente la inserción.
Se hace un select count para corroborar que existan 500000 registros.
3. Hacer una consulta a la totalidad de registros de la tabla. Mi tiempo de respuesta para mostrar la totalidad de los registros fue de
16687 ms. (Cambia en pocos milisegundos cada que se corre).
4. hacer una consulta con condición: 90645 es un numero aleatorio entre 1 y 500000 para ver el rendimiento de la consulta. El tiempo de respuesta fue de
297ms. Consejo:
Realiza este mismo procedimiento en tu base de datos y compara mis resultados con tus resultados.
si son similares, el problema puede ser el numero de columnas como dices y se verifica el porque oracle vale unos cuantos millones
Si son totalmente diferentes a los que te pongo, definitivamente hay que hacer un análisis profundo a tu base de datos para ver que proceso se está comiendo todos los recursos.
Nos cuentas como te va.