----- Mensaje original ----- > > > > Esta es la parte del código donde se vuelve extremadamente lento > dentro del trigger: > > SELECT idevent FROM events WHERE ideventtype = > ANY(et.auto_close_on_event_defined) > AND status = 0 AND idaccount = NEW.idaccount AND zu = NEW.zu AND > idevent != NEW.idevent > > > El campo zu antes era tipo texto, lo cambie a bigint, eso mejoro un > poco pero sigue lento, no se que mas hacer. > Que campos debo indexar o que podria hacer? > > > /* > FOR idevent_for_close_on_restore IN SELECT idevent FROM events WHERE > ideventtype = ANY(et.auto_close_on_event_defined) > AND status = 0 AND idaccount = NEW.idaccount AND zu = NEW.zu AND > idevent != NEW.idevent LOOP > > INSERT INTO event_comments( > comment_event, status, > idevent) > VALUES ('Event closed for restoring event idevent '||NEW.idevent, 7, > idevent_for_close_on_restore); > > END LOOP; > */ > > > Todo esto pertenece a una aplicacion web de monitoreo de servidores y > aplicaciones (o algo asi), la he publicado en > http://openamsdemo-edwinspire.rhcloud.com/oams_contacts.php > > Aunque aun no esta la base de datos instalada. > > > Atte: > Edwin De La Cruz (edwinspire) > Quito - Ecuador
Una de las reglas que suelen servir para definir la utilidad de un indice, es que el mismo componga o contenga una deficion parecida al "where" de tu select. Tal vez un indice por (idaccount, zu).... Si "status = 0" representa una porcion pequeña de la tabla, entonces crear un indice parcial seria ventajoso tambien. Otra chance es que lo lento sean las inserciones en event_comments, y no el select previo. Toma ese select, reemplaza los "NEW.campo" por valores reales, y probalo separado del resto del trigger. HTH Gerardo - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda