Как оптимизировать обновление Postgres с помощью Delphi (компоненты BDE)? - PullRequest
1 голос
/ 15 декабря 2011

Я работаю в Delphi 7 и PostgreSQL 9.0, и в моей базе данных пятьдесят таблиц. У меня есть ситуация, когда мне нужно выполнить более пятидесяти запросов на обновление одновременно, по одному для каждой таблицы.

У меня есть процедура:

var
sTheQuery : string;
begin 
sTheQuery    :='update diary set remark = replace(remark,'+#39+'%'+#39+', '$')';
QueryImages.SQL.Clear;
QueryImages.SQL.Text:=sTheQuery;
QueryImages.ExecSQL;

sTheQuery    :='update bioschema set note = replace(note,'+#39+'%'+#39+', '$')';
QueryImages.SQL.Clear;
QueryImages.SQL.Text:=sTheQuery;
QueryImages.ExecSQL;
sTheQuery    :='update displaymaps set region = replace(region, '+#39+'%'+#39+', '$')';
QueryImages.SQL.Clear;
QueryImages.SQL.Text:=sTheQuery;
  QueryImages.ExecSQL;
sTheQuery    :='update ecosystem set description = replace(description,'+#39+'%'+#39+', '$')';
QueryImages.SQL.Clear;
QueryImages.SQL.Text:=sTheQuery;
  QueryImages.ExecSQL;

.
.
// total 50 times
end;

Является ли этот подход улучшением?:

    var
    sTheQuery   : string;
    begin
    sTheQuery    :='update diary set remark = replace(remark,'+#39+'%'+#39+', '$');';
    sTheQuery    :=sTheQuery+'update bioschema set note = replace(note,'+#39+'%'+#39+', '$');';
    sTheQuery    :=sTheQuery+'update displaymaps set region = replace(region, '+#39+'%'+#39+', '$');';
    sTheQuery    :=sTheQuery+'update ecosystem set description = replace(description, '+#39+'%'+#39+', '$');';
    .
    .//total 50 times
    .
    QueryImages.SQL.Clear;
    QueryImages.SQL.Text:=sTheQuery;
     QueryImages.ExecSQL;
    end.

1 Ответ

3 голосов
/ 15 декабря 2011

Я бы не рекомендовал ни того, ни другого. Я бы реорганизовал мой код, чтобы создать метод, который принимает запрос и обрабатывает его, как этот псевдокод:

executeQuery(String sTheQuery) {
   QueryImages.SQL.Clear;
   QueryImages.SQL.Text:=sTheQuery;
   QueryImages.ExecSQL;
}

doit() {
    executeQuery('update diary set remark = replace(remark,'+#39+'%'+#39+', '$')');
    executeQuery('update bioschema set note = replace(note,'+#39+'%'+#39+', '$')');
    executeQuery('update displaymaps set region = replace(region, '+#39+'%'+#39+', '$')');
    executeQuery('update ecosystem set description = replace(description, '+#39+'%'+#39+', '$')');
} 

Это легко обслуживаемо, легко читается и понимается, и оно будет работать приемлемо.

...