Оптимизировать операцию INSERT / UPDATE / DELETE

Интересно, можно ли оптимизировать следующий скрипт? Он много пишет на диск, потому что удаляет, возможно, самые последние строки и вставляет их заново. Я думал о применении чего-то вродевставить ... при обновлении дубликата ключа " и нашел некоторые возможности для обновления одной строки, но я нене знаю, как применять его в контексте.INSERT INTO ... SELECT query

CREATE OR REPLACE FUNCTION update_member_search_index() RETURNS VOID AS $
DECLARE
   member_content_type_id INTEGER;
BEGIN
   member_content_type_id :=
      (SELECT id FROM django_content_type
       WHERE app_label='web' AND model='member');

   DELETE FROM watson_searchentry WHERE content_type_id = member_content_type_id;

   INSERT INTO watson_searchentry (engine_slug, content_type_id, object_id
                                 , object_id_int, title, description, content
                                 , url, meta_encoded)
   SELECT 'default',
         member_content_type_id,
         web_member.id,
         web_member.id,
         web_member.name,
         '',
         web_user.email||' '||web_member.normalized_name||' '||web_country.name,
         '',
         '{}'
   FROM web_member
   INNER JOIN web_user ON (web_member.user_id = web_user.id)
   INNER JOIN web_country ON (web_member.country_id = web_country.id)
   WHERE web_user.is_active=TRUE;
END;
$ LANGUAGE plpgsql;

РЕДАКТИРОВАТЬ: Схемы,,,:web_memberwatson_searchentryweb_userweb_countryhttp://pastebin.com/3tRVPPVi.

Суть в том, чтобы обновить столбцыtitle а такжеcontent вwatson_searchentry, В таблице есть триггер, который устанавливает значение столбцаsearch_tsv на основе этих столбцов.

(content_type_id, object_id_int) вwatson_searchentry является уникальной парой в таблице, но atm индекс отсутствует (для нее нет смысла).

Этот сценарий следует запускать не чаще одного раза в день для полной перестройки поискового индекса, а иногда и после импорта некоторых данных.

Ответы на вопрос(1)

Ваш ответ на вопрос