[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