[firebase-br] Cursores e invariaveis

Jeudí Prando - GMail jeudiprando em gmail.com
Ter Nov 14 16:37:01 -03 2006


essa vai para o TeamFB...

retirado do livro do Carlos H. Cantu "Firebird 2 - O Banco do Novo Milênio"

-- pág 194 e 195:

A detectação de invariantes foi bastante melhorada no firebird 2.0.
Quando uma procedure ou trigger é compilada, é transformada em uma linguagem interna chamada BLR. Durante a compilação, o Firebird tenta detectar expressões (que podem ser inclusive subqueries) que são independentes do contexto a qual estão associadas.

Veja o exemplo abaixo, retirado do release notes do FB 2.0:

select * from rdb$relations
where rdb$relation_id <
(select rdb$relation_id from rdb$database)

O Firebird 2.0 detecta que a subquerie determinada por "select rdb$relation_id from rdb$database" não depende da query principal e portanto o fetch dos dados da subquery é executado apenas uma unica vez ao invés de executá-la para cada registro retornado pela query principal.

minha pergunta é:

se eu fizer um script SQL assim:

"delete from tabela not in (subquery)"

a vantagens assima também se aplicão ao mesmo?
ou seja, a subquery seria executada uma unica vez?


Mais detalhes sobre a lista de discussão lista