On Wed, Jan 27, 2016 at 5:01 PM, setysvar setys...@gmail.com
[firebird-support] <firebird-support@yahoogroups.com> wrote:

>  >If the question is which is likely to perform better, then the answer
> is the select.
> ...
>  >In general, execute block should be used when you want to change what
> Firebird
>  >considers fundamental elements of a quer...
>
> I'd never thought I would ask YOU this question, but are you sure, Ann?
>

Sure?  No.

> I just wonder if you've thought EXECUTE STATEMENT where you've written
> EXECUTE BLOCK.
>

Probably.  Does EXECUTE BLOCK allow you to build up the block at runtime?
If so, then I think I may be right unless the compiler is clever enough to
recognize
that your particular block is static.

>
> UPDATE <HugeTable> h
> SET <AField> = (SELECT <AnotherField> FROM <TinyTable> t WHERE
> h.<SelectiveIndexedField> = t.<SomeField>)
>
> is much slower than
>
> EXECUTE BLOCK AS
> Declare variable a integer;
> Declare variable b integer;
> BEGIN
>    FOR SELECT DISTINCT <SomeField>, <AnotherField>
>    FROM <TinyTable>
>    INTO :a, :b do
>      UPDATE HugeTable
>         SET <AField> = :b
>         WHERE <SelectiveIndexedField> = :a;
> END
>

GDS/Galaxy aka InterBase, aka Firebird was built around a relational
language that practitioners at the time would have called "procedural" as
opposed to Quel which was "declarative".  Both lost to SQL which was just
ugly.  The procedural language typically
used nested loops "for <this> for <that which matched this> do <the other>
end-for end-for", which maps very nicely into the PSQL
FOR SELECT.   The SQL UPDATE statement is one of the ugliest parts of that
ugly language and makes it very difficult to optimize
the case where you're drawing values from a small table to update a large
table.

If EXECUTE BLOCK requires static queries, then I'm completely wrong.  If
not, you might be better writing procedures for updates like this, or as
Mark suggests, MERGE.

Cheers,

Ann
  • [firebird-suppo... hamacker sirhamac...@gmail.com [firebird-support]
    • Re: [fireb... Mark Rotteveel m...@lawinegevaar.nl [firebird-support]
    • Re: [fireb... Ann Harrison aharri...@ibphoenix.com [firebird-support]
      • Re: [f... setysvar setys...@gmail.com [firebird-support]
        • Re... Mark Rotteveel m...@lawinegevaar.nl [firebird-support]
          • ... Svein Erling Tysvær setys...@gmail.com [firebird-support]
            • ... Mark Rotteveel m...@lawinegevaar.nl [firebird-support]
        • Re... Ann Harrison aharri...@ibphoenix.com [firebird-support]
          • ... Helen Borrie hele...@iinet.net.au [firebird-support]
      • Re: [f... hamacker sirhamac...@gmail.com [firebird-support]

Reply via email to