Sistemas de Gerência de Bancos de Dados

Documentos relacionados
Sistemas de Gerência de Bancos de Dados

Sistemas de Gerência de Bancos de Dados

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

UTFPR - Universidade Tecnológica Federal do Paraná. Processamento e otimização de consultas

Processamento de Consultas. Processamento de Consultas. Processamento de Consultas Distribuídas. Otimização de Consultas

Processamento da Consulta. Processamento da Consulta

3 Plano de Execução de Consultas

Processamento e Otimização de Consultas

CAPÍTULO 3. INTRODUÇÃO AO PROCESSAMENTO DE CONSULTAS

ÁLGEBRA E CÁLCULO RELACIONAL

Compilação, Otimização e Execução de Consultas. Profa. Dra. Cristina Dutra de Aguiar Ciferri

Escrita ( W ) do Resultado

ACH2025. Laboratório de Bases de Dados Aula 15. Processamento de Consultas Parte 2 Otimização. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Processamento e Otimização de Consultas. Msc. Simone Dominico Orientador: Dr. Eduardo Cunha de Almeida PPGINF - UFPR

- Um "query block" permite a implementação das operações de selecção, projecção e junção da álgebra relacional.

MATA60 BANCO DE DADOS Aula: Otimização. Prof. Daniela Barreiro Claro

Sumário. Definição do Plano de Execução

Sistemas de Bases de Dados 1.º teste (com consulta limitada: 2 folhas identificadas) - Duração: 2 horas

Unipar Universidade Paranaense Disciplina: Banco de Dados II 3ª Série Profª: Késsia Marchi Profa. Késsia Marchi

BCD29008 Banco de dados

Sistemas de Bases de Dados 1.º teste (com consulta limitada: 2 folhas identificadas) - Duração: 2 horas

ROTEIRO Introdução Álgebra e Cálculo Relacional Operações da Álgebra Relacional Classificação de Operadores da Álgebra Relacional Mapeamento AR -> SQL

Álgebra Relacional e SQL

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

Universidade Veiga de Almeida

Douglas Matheus de Souza Prof. Marcel Hugo, Mestre - Orientador

Álgebra Relacional e SQL operações de interesse

Introdução a Bancos de Dados

Banco de Dados. Aula 8 - Prof. Bruno Moreno 16/09/2011

Otimização de Consultas Baseada em Custo. Cristina Dutra de Aguiar Ciferri

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

Arquivos invertidos 39

Sistemas de Gerência de Bancos de Dados. Módulo 1 - Armazenamento

Bases de Dados BDDAD. Linguagem SQL. Comando SELECT Divisão Algébrica. Nelson Freire (ISEP LEI-BDDAD 2015/16) 1/9

Processamento de Consultas. Simone Dominico Orientador: Dr. Eduardo Cunha de Almeida PPGINF - UFPR

Tecnologias de Bancos de Dados

O Modelo e a Álgebra Relacional

Introdução ao PostgreSQL

1. Em relação à organização de arquivos e índices, responda: (a) Dado um arquivo de dados, o que é a chave de um índice para o arquivo?

Atualização e Inserção de Dados. SQL Avançado. Pedro F. Carvalho OCP Oracle g

Álgebra Relacional. Linguagem de consultas procedural Conjunto de operações que usam uma ou duas relações como entrada e geram uma relação de saída

- SQL Linguagem de Manipulação de Dados

Modelo Relacional - Manipulação

Processamento de Produtos ( X )

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

Aula 9 BD 1 SQL Parte 1. Profa. Elaine Faria UFU

23/05/12. Agenda. Introdução. Introdução. Introdução. Álgebra. Relacional. Cálculo. Relacional

Projeto de Banco de Dados

S U B G R U P O S D M L E D Q L : A L T E R A N D O E A P A G A N D O D A D O S E M U M A T A B E L A

Etapa III - Implementação de Operadores da Álgebra Relacional; Etapa IV - Comparação experimental de varredura sequencial x acesso aleatório

Subconsultas ou Consultas Aninhadas

Tornou-se um padrão de fato para aplicações comerciais, devido a sua simplicidade e performance.

II.1 Conceitos Fundamentais. Uma delas é programar o =>

ACH2025. Laboratório de Bases de Dados Aula 8. Indexação e Hashing Parte 1. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

MATA60 BANCO DE DADOS Aula 10- Indexação. Prof. Daniela Barreiro Claro

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Renomeada para SQL (Structured Query Language)

SQL Linguagem de Manipulação de Dados SQL DML SQL DML. Exemplo Modelo Relacional. Exemplo ME-R SQL DML CONTINUAÇÃO...

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 17. Escola Politécnica da Universidade de São Paulo

modelo introduzido por E. F. Codd Meados da década de 70: protótipos. INGRES (UC Berkeley, 73 77) System R (IBM Research at San Jose, 74 78)

Roteiro. Álgebra Relacional e Cálculo Relacional. BCC321 - Banco de Dados I. Introdução. Ementa. Posicionamento. Introdução

Processamento e Otimização de Consultas

ANÁLISE E PROJETO DE BANCO DE DADOS

O modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de

Operações da Álgebra Relacional Operadores Especiais da Álgebra Relacional Renomeação

Otimização de Consultas SQL. André Luiz do Vale Soares Banco de Dados II

OTIMIZAÇÃO DE CONSULTAS RELACIONAIS TRABALHO DE PÓS-GRADUAÇÃO

Manipulação de Dados com SQL

IEC Banco de Dados I Aula 06 Álgebra Relacional

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013

Álgebra e cálculo relacional. Andre Noel

GBC053 Gerenciamento de Banco de Dados. Plano de Curso e Introdução. Ilmério Reis da Silva UFU/FACOM/BCC

BCD29008 Banco de dados

saída durante o runtime Usando Functions de uma Única Linha para Personalizar Relatórios Mostrar as diferenças entre as functions SQL de uma única

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Renomeada para SQL (Structured Query Language)

Bases de Dados. Álgebra Relacional II Junções, agregações, vistas. P. Serendero,

Álgebra Relacional e Cálculo Relacional

Projeto de Bancos de Dados Distribuídos (Parte 01)

Subconsultas ou Consultas Aninhadas

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Banco de Dados Prof. Célio R. Castelano Página 1 de 9. Álgebra Relacional

Banco de Dados I. Aula 16 - Prof. Bruno Moreno 04/11/2011

TLBD II. Continuação

Modelo Entidade-Relacionamento (E-R)

Introdução ao Banco de Dados. Banco de Dados

O Modelo Relacional. Criando relações em SQL

1. E 1 R 1 X R 2 (equi-join) C = D

Rápida revisão do Modelo Relacional

Banco de Dados. Otimização de consultas. Prof. Joao Eduardo Ferreira Prof. Osvaldo Kotaro Takai. Última atualização: 15 de maio de 2006

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

O Modelo Relacional. Database Management Systems, R. Ramakrishnan (tradução, autorizada, de Anna & Mario Nascimento)

SQL. Subqueries. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática

Aula 8 BD1 Álgebra Relacional. Profa. Elaine Faria UFU

14/03/12. Tipos de fragmentação. Projeto de Bancos de Dados Distribuídos (Parte 01) Correção das regras de fragmentação. Grau de fragmentação

L Q S m e g a u g n Li A

Introdução Ferramentas Unix MapReduce Outras Ferramentas. Batch Processing. Fabiola Santore. Universidade Federal do Paraná

Transcrição:

Sistemas de Gerência de Bancos de Dados 4 - Consultas e Transações 4.1- Processamento de Consultas 1

Introdução Etapas do Processamento de uma consulta: linguagem do usuário análise sintática e tradução otimização execução Análise Sintática linguagem intermediária Tópicos: CAT Otimização linguagem interna Interfaces Catálogo Execução Otimização Execução BD linguagem elementar 2

Linguagem do usuário Linguagem intermediária Linguagem interna Linguagem elementar Interfaces 3

Interfaces - Linguagem do Usuário Consultas simples em SQL: um subconjunto de SQL, incluindo uma cláusula INTO armazenando a resposta e restringindo a qualificação a uma expressão booleana sobre comparações, negadas ou não Formato genérico de uma consulta: select <lista resultante> into <relação resultante> from <lista de relações> where <qualificação> onde a qualificação é uma expressão booleana composta de termos da forma: seleção r.a<op><constante> restrição r.a<op>r.b junção r.a<op>s.b 4

Interfaces - Linguagem do Usuário Classificação das cláusulas de uma consulta: univariável: todos os literais da cláusula são sobre a mesma variável multivariável homogênea: a cláusula é univariável, ou todos os literais são sobre as mesmas 2 variáveis heterogênea Classificação das Consultas herdada das classificação das cláusulas 5

Exemplo: Interfaces - Linguagem do Usuário select F.NOME from FORNECEDOR F, FORNECIMENTO FN, REGIÃO R P1 where F.NUMERO = FN.NUMERO P2 and (FN.CODIGO = 10 or FN.CODIGO = 12) P3 and FN.QUANT > 10.000 P4=(P41 or P42) and (F.SEDE = R.ESTADO or F.SEDE = 'DF') P5 and R.NOME = 'CENTRO SUL' P1 : multivariável e homogênea P2, P3 e P5 : univariáveis P4 : multivariável e heterogênea (primeiro literal sobre F e R mas segundo literal sobre F apenas) 6

Interfaces - Linguagem Intermediária Álgebra relacional simples: subconjunto da álgebra relacional com o mesmo poder expressivo que o subconjunto de SQL adotado conjunto de operadores considerado: projeção seleção junção cartesiano união proj[x](t) sel[p](t) join[p](t,u) prod(t,u) union(t,u) 7

Esquema Conceitual Interfaces - Exemplo create table PRODUTO (CODIGO (integer), NOME (char(10)), MELHOR_FORN (integer) ) create table FORNECIMENTO (NUMERO (integer), CODIGO (integer), QUANTIDADE (integer), LOCAL (char(5)) ) Consulta expressa em SQL select P.CODIGO from PRODUTO P, FORNECIMENTO F where F.NUMERO = '41.738' and F.CODIGO = P.CODIGO and P.MELHOR_FORN = '41.738' 8

Consulta expressa na álgebra Interfaces - Exemplo proj[codigo.produto] (join[codigo.fornecimento = CODIGO.PRODUTO] (sel(numero='41.738')(fornecimento), sel[melhor_forn = '41.738'](MELHOR_FORN))) proj[codigo.produto] join[codigo.fornecimento = CODIGO.PRODUTO] sel(numero='41.738') sel[melhor_forn = '41.738'] FORNECIMENTO MELHOR_FORN 9

Interfaces - Linguagem Interna Estruturas Internas tabelas = seqüências de registros internos tipos de tabelas tabelas externas: tabelas em memória secundária tabelas de inversão: arquivos invertidos para tabelas externas tabelas internas: tabelas em memória principal tabelas transientes: agem como área intermediária entre operações consecutivas IDR = campo especial dos registros com um identificador único 10

Operações sobre Tabelas CRIA_TAB(T,X) CRIA_INV(T,Y,U) DESTROI(T) ORD(T,X,tipo;V) onde tipo=ascente ou descente UNIAO(T,U;V) Interfaces - Linguagem Interna 11

Interfaces - Linguagem Interna Operações sobre Tabelas SELEÇÃO(T,X,P(T);V) - seleção sobre T constrói uma nova tabela V(IDR,X) tal que v é um registro de V sse existe t em T tal que v(x)=t(x) e v(idr) é uma nova id t satisfaz a P(T) 12

Interfaces - Linguagem Interna Operações sobre Tabelas JUNÇÃO(T,U,X,Y,P(T,U),P(T),P(U);V) - junção tradicional constrói uma nova tabela V(IDR,X,Y) tal que v é um registro de V sse existem t e u em T e U tais que v(x)=t(x) e v(y)=u(y) e v(idr) é uma nova id t satisfaz a P(T) u satisfaz a P(U) t e u concatenadas satisfazem a P(T,U) 13

Interfaces - Linguagem Interna Programas na Linguagem Interna: programas multi-thread cujas operações e estruturas de dados básicas são aquelas descritas anteriormente 14

Interfaces - Linguagem Elementar Estruturas Físicas armazena dados, estruturas auxiliares de acesso aos dados, informações de controle, etc... organização: memória secundária dividida em segmentos segmentos divididos em páginas com id único Ações Elementares: R(X) W(X) leia todas as páginas cujos id's estão no conjunto X mova do buffer pool para memória secundária todas as páginas cujos id's estão em X r(x,p,s) recupere o conteúdo da página x a partir de p até p+s-1 w(x,p) mude o conteúdo da página x a partir da posição p (o novo valor e o comprimento foram omitidos...) 15

Catálogo Informações sobre uma tabela T: n(t) p(t) = número de registros de T = número de páginas ocupadas por T p'(t) = p(t) se T for passada como tabela externa = 0 se T for passada como tabela interna s(t) f(t) f(t) = tamanho do registro de T = número médio de registros de T por página = tamanho da página / s(t) (supondo que T não compartilha páginas com outras tabelas e que os registros de T são de tamanho fixo) 16

Catálogo Informações sobre uma lista de atributos X de uma tabela T: V(X,T) = número de valores distintos de X que ocorrem em T SC(X,T)= número médio de registros de T que satisfazem a uma condição de igualdade em X SC(X,T)= 1, se X é chave de T SC(X,T)= n(t) / V(X,T), se X não é chave de T MAX(T,X) = maior valor de T[X] MIN(T,X) = menor valor de T[X] 17

Informações sobre um índice U: Catálogo CHV(U)= número de chaves distintas em U p(u) f(u) h(u) = número de páginas conto chaves em U = número médio de filhos de um nó, para uma árvore B = número de níveis de U = 1, se U é uma tabela de hash = [log(v(x,t)], se U é uma árvore B sobre as chaves X de T 18

Catálogo Notação: Q é uma consulta U1,...,Un são as relações varridas por Q B é a qualificação de Q T é a relação resultante de Q, ou seja, T é o subconjunto de U = U1 x...x Un que satisfaz B Fator de Seletividade: F(B) = percentagem de tuplas de U que satisfazem B CAR(T) = CAR(U1) x...x CAR(Un) x F(B) 19

Catálogo Estimação de F(B): u i.x = valor F(B) = 1 / V(X,Ui) F(B) = 1 / CHV(V), se V for uma inversão de U i por X F(B) = 1 / 10, se não houver informação sobre T[X] u i.x > valor F(B) = (MAX(U i,x) - valor) / (MAX(U i,x) - MIN(U i,x)) F(B) = 1 / 10, se o domínio não for aritmético 20

Catálogo Estimação de F(B): u a.x = u b.y U a U b X = x Y = x no máximo uma tupla de U b com Y=x Se Y for chave (primária) de U b então cada tupla de U a se junta com no máximo uma tupla de U b. Logo, join[u a.x = u b.y](u a,u b ) não pode ter mais tuplas do que U a. 21

Catálogo Estimação de F(B): u a.x = u b.y F(B) = join[u a.x = u b.y](u a, U b ) ( U a * U b ) Se Y for chave de U b então cada tupla de U a se junta com no máximo uma tupla de U b. Logo, join[u a.x = u b.y](u a, U b ) U a, ou seja: F(B) = 1 / U a Se X for chave de U a então join[u a.x = u b.y](u a, U b ) U b. Ou seja: F(B) = 1 / U b Se X for chave de U a e Y for chave de U b, então : F(B) = min(1 / U a, 1 / U b ) = 1 / max( U a, U b ) 22

Catálogo Estimação de F(B): u a.x = u b.y U a U b X = x Y = x Y = x Y = x Y = x 1 * U b CHV(V b ) Se V b for uma inversão de U b por Y, então estima-se que 1 * U b tuplas de U b se juntem com cada tupla de U a. CHV(V b ) Logo, join[u a.x = u b.y](u a,u b ) não pode ter mais tuplas do que U a * ( 1 * U b ) CHV(V b ) 23

Catálogo Estimação de F(B): u a.x = u b.y F(B) = join[u a.x = u b.y](u a, U b ) ( U a * U b ) Se V b for uma inversão de U b por Y, então join[u a.x = u b.y](u a, U b ) U a * ( 1 * U b ), logo: CHV(V b ) F(B) = 1 / CHV(V b ) Se V a for uma inversão de U a por X, então F(B) = 1 / CHV(V a ) Se V a for uma inversão de U a por X e V b for uma inversão de U b por Y, então : F(B) = 1 / max( CHV(V a ), CHV(V b ) ) 24

Catálogo Estimação de F(B): u a.x = u b.y F(B) = 1 / U a se X for chave de U a F(B) = 1 / max( U a, U b ) se X for chave de U a e Y for chave de U b F(B) = 1 / CHV(V a ) se V a for uma inversão de U a por X F(B) = 1 / max(chv(v a ), CHV(V b )) se V a for uma inversão de U a por X e V b for uma inversão de U b por Y F(B) = 1 / 10 (na falta de informação) u i.x > u j.y F(B) = (MAX(U i,x) - MIN(U j,y) / (MAX(U i,x) - MIN(U i,x)) F(B) = 1 / 10 (se o domínio de A não for aritmético) 25

Catálogo Estimação de F(B): B = B1 or B2 F(B) = F(B1) + F(B2) - F(B1)*F(B2) B = B1 and B2 F(B) = F(B1) * F(B2) B = not B1 F(B) = 1 - F(B1) 26

Execução Execução de programas na linguagem interna: implementação das operações sobre tabelas: seleção seleção sequencial seleção direta seleção por união seleção por interseção junção junção aninhada junção aninhada por página junção aninhada indexada junção por intercalação junção por hash execução de programas 27

Execução SELEÇAO_SEQUENCIAL(T,X,P(T);V) T X P(T) V - tabela externa - atributos de T que comporão a resposta V - predicado sobre T - resposta conto a projeção em X das tuplas de T que satisfazem P(T) crie V como vazia for each t em T do if t satisfaz P(T) then acrescente t[x] a V 28

Execução custo da operação: C = número de páginas de T lidas (custo de I/O) + número de páginas de V gravadas + W * número de tuplas de T processadas (custo de CPU) caso 1: T e V externas com os registros agrupados C = p(t) + n(t)*f(p(t))* X / tamanho da página + W*n(T) (teste é feito para todas as tuplas em T) onde X denota o comprimento de X (outros casos deixados como exercício) 29

Execução SELEÇÃO_DIRETA(T,X,P(T),U,Q(T);V) T X P(T) U Q(T) V - tabela externa - atributos de T que comporão a resposta V - predicado sobre T - tabela de inversão sobre T nos atributos Y - expressão booleana conto atributos apenas em Y - resposta conto a projeção em X das tuplas de T que satisfazem P(T) and Q(T) crie V como vazia crie P com todos os apontadores para registros de T que satisfazem Q(T), usando U for each p em P do recupere em t o registro de T apontado por p if t satisfaz P(T) then acrescente t[x] a V 30

Execução custo da operação: C = número de páginas de T lidas (custo de I/O) + número de páginas de U lidas + número de páginas de V gravadas + W * número de tuplas de T processadas (custo de CPU) caso 1: V externa com os registros agrupados premissas: cada registro de T que satisfaz Q(T) requer leitura de 1 página determinar que chaves satisfazem Q(T) requer n(u) * F(Q(T)) acessos a páginas de U C = n(t) * F(Q(T)) + n(u) * F(Q(T)) + n(t) * F(P(T)) * F(Q(T) * X / tamanho da página + W * n(t) * F(Q(T)) (teste de P(T) é feito para todas as tuplas em T que satisfazem a Q(T)) (outros casos deixados como exercício) 31

Execução SELEÇÃO_UNIÃO(T,X,P(T) or P'(T),U,U';V) T - tabela externa X - atributos de T que comporão a resposta V P(T) or P'(T) - predicado sobre T U - tabela de inversão sobre T capaz de resolver P(T) U' - tabela de inversão sobre T capaz de resolver P'(T) V - resposta conto a projeção em X das tuplas de T que satisfazem P(T) or P'(T) crie V como vazia crie P em memória com todos os apontadores para registros de T que satisfazem P(T), usando U crie P' em memória com todos os apontadores para registros de T que satisfazem P'(T), usando U' for each p em P união com P' do recupere em t o registro de T apontado por p acrescente t[x] a V 32

Execução SELEÇÃO_INTERSEÇÃO(T,X,P(T) and P'(T),U,U';V) T - tabela externa X - atributos de T que comporão a resposta V P(T) and P'(T) - predicado sobre T U - tabela de inversão sobre T capaz de resolver P(T) U' - tabela de inversão sobre T capaz de resolver P'(T) V - resposta conto a projeção em X das tuplas de T que satisfazem P(T) and P'(T) crie V como vazia crie P em memória com todos os apontadores para registros de T que satisfazem P(T), usando U crie P' em memória com todos os apontadores para registros de T que satisfazem P'(T), usando U' for each p em P interseção com P' do recupere em t o registro de T apontado por p acrescente t[x] a V 33

Execução JUNÇÃO_ANINHADA(T,U,X,Y,P(T,U),P(T),P(U);V) T, U - tabelas externas X, Y - atributos de T e U que comporão a resposta V P(T,U) - predicado de junção entre T e U P(T), P(U) - predicados adicionais sobre T e U V - resposta conto a projeção em X e Y das tuplas de T e U que satisfazem P(T,U) and P(T) and P(U) t 1 P(t) P(u) 2 u v 3 v 34

Execução JUNÇÃO_ANINHADA(T,U,X,Y,P(T,U),P(T),P(U);V) T, U - tabelas externas X, Y - atributos de T e U que comporão a resposta V P(T,U) - predicado de junção entre T e U P(T), P(U) - predicados adicionais sobre T e U V - resposta conto a projeção em X e Y das tuplas de T e U que satisfazem P(T,U) and P(T) and P(U) inicie V como vazia; for each registro t de T que satisfaz a P(T) do substitua t em P(T,U) criando P(t,U); for each registro u de U que satisfaz a P(t,U) e P(U) do acrescente um registro v a V criado a partir de t e u 35

Execução JUNÇÃO_ANINHADA_POR_PÁGINA(T,U,X,Y,P(T,U),P(T),P(U);V) T, U - tabelas externas agrupadas X, Y - atributos de T e U que comporão a resposta V P(T,U) - predicado de junção entre T e U P(T), P(U) - predicados adicionais sobre T e U V - resposta conto a projeção em X e Y das tuplas de T e U que satisfazem P(T,U) and P(T) and P(U) pagina p t 1 pagina p P(t) 2 página q u página q P(u) v 3 v 36

Execução JUNÇÃO_ANINHADA_POR_PÁGINA(T,U,X,Y,P(T,U),P(T),P(U);V) T, U - tabelas externas agrupadas X, Y - atributos de T e U que comporão a resposta V P(T,U) - predicado de junção entre T e U P(T), P(U) - predicados adicionais sobre T e U V - resposta conto a projeção em X e Y das tuplas de T e U que satisfazem P(T,U) and P(T) and P(U) inicie V como vazia; for each página p de T do for each registro t em p que satisfaz P(T) do substitua t em P(T,U) criando P(t,U) for each página q de U do for each registro u em q que satisfaz P(t,U) e P(U) do acrescente um registro v a V criado a partir de t e u 37

Execução JUNÇÃO_ANINHADA_INDEXADA(T,U,X,Y,P(T,U),P(T),P(U),R;V) T, U - tabelas externas X, Y - atributos de T e U que comporão a resposta V P(T,U) - predicado de junção entre T e U P(T), P(U) - predicados adicionais sobre T e U R V - índice sobre U que resolve P(t,U) - resposta conto a projeção em X e Y das tuplas de T e U que satisfazem P(T,U) and P(T) and P(U) t P(t,U) R 3 P(t) 1 2 P(t,u) P(u) e P(t,u) v 3 4 u v 38

JUNÇÃO_ANINHADA_INDEXADA(T,U,X,Y,P(T,U),P(T),P(U),R;V) T, U - tabelas externas X, Y - atributos de T e U que comporão a resposta V P(T,U) - predicado de junção entre T e U P(T), P(U) - predicados adicionais sobre T e U R V - índice sobre U que resolve P(t,U) - resposta conto a projeção em X e Y das tuplas de T e U que satisfazem P(T,U) and P(T) and P(U) inicie V como vazia; for each registro t de T que satisfaz a P(T) do substitua t em P(T,U) criando P(t,U) crie S com todos os apontadores para registros de U que satisfazem P(t,U), usando R for each s em S do recupere em u o registro de U apontado por s if u satisfaz P(U) then acrescente um registro v a V criado a partir de t e u 39

Execução JUNÇÃO_INTERCALAÇÃO(T,U,X,Y,P(T,U),P(T),P(U);V) T, U - tabelas externas X, Y - atributos de T e U que comporão a resposta V P(T,U) - predicado de junção entre T e U da format.x<op>u.y T e U estão ordenados por X e Y, respectivamente, em uma ordem de junção compatível com T.X<op>U.Y P(T), P(U) - predicados adicionais sobre T e U V - resposta conto a projeção em X e Y das tuplas de T e U que satisfazem P(T,U) and P(T) and P(U) t varredura 1 P(t) P(u) v 2 varredura u 3 v 40

JUNÇÃO_INTERCALAÇÃO(T,U,X,Y,P(T,U),P(T),P(U);V) inicie V como vazia inicie t0 com o primeiro registro de T que satisfaz P(T) (* t0 será nulo caso não exista inicie u0 com o primeiro registro de U que satisfaz P(U) (* u0 será nulo caso não exista while t0 não for nulo e u0 não for nulo do substitua t0 em T.X<op>U.Y criando P(t0,U) crie uma tabela interna temporária M, inicialmente vazia while u0 não for nulo e u0 satisfizer P(t0,U) do acrescente u0 a M u0 := próximo registro de U a partir de u0 que satisfaz P(U) x := t0[x] while t0[x] = x do for each registro m em M do acrescente um registro v a V criado a partir de t0 e m t0 := próximo registro de T a partir de t0 que satisfaz P(T) 41

Execução JUNÇÃO_HASH(T,U,X,Y,P(T,U),P(T),P(U);V) T, U - tabelas externas X, Y - atributos de T e U que comporão a resposta V P(T,U) - predicado de junção entre T e U da forma T.X=U.Y P(T), P(U) - predicados adicionais sobre T e U V - resposta conto a projeção em X e Y das tuplas de T e U que satisfazem P(T,U) and P(T) and P(U) Tabela T HT1 P(t) 1 HT2 2 P(u) 4 HU1 HU2 3 Tabela U HT3 v HU3 HT4 v 5 HU4 42

Execução JUNÇÃO_HASH(T,U,X,Y,P(T,U),P(T),P(U);V) inicie V como vazia for each t em T such that t satisfaz P(T) do i := h(t[x]) acrescente t a HT(i) for each u em U such that u satisfaz P(U) do i := h(u[y]) acrescente u a HU(i) for each i = 0 to max do for each t em HT(i) do for each u in HU(i) do acrescente um registro v a V criado a partir de t e u 43

Execução Execução de Programas: um programa na linguagem interna pode ter vários threads, cada um correspondo a uma subexpressão indepente dentro da expressão relacional inicial proj[codigo.produto] (join[codigo.fornecimento = CODIGO.PRODUTO] (sel(numero='41.738')(fornecimento), sel[melhor_forn = '41.738'](MELHOR_FORN))) proj[codigo.produto] join[codigo.fornecimento = CODIGO.PRODUTO] sel(numero='41.738') sel[melhor_forn = '41.738'] FORNECIMENTO MELHOR_FORN 44

Execução de Programas: Execução a passagem de resultados intermediários de uma operação a outra pode ser feita através de: tabelas externas materializando os resultados tabelas internas manto os resultados no buffer pool tabelas transientes usando uma técnica de pipelining 45

Execução Pipelining: dirigido por demanda: o sistema repetidamente solicita registros à operação no topo do pipeline cada operação por sua vez solicita registros à operação imediatamente em seguida no pipeline dirigido pelo produtor: as operações não esperam por solicitações, mas acresentam registros até a área de trabalho designada esteje cheia 46