Metodi per l esecuzione di join. Algoritmi di join: generalità

Documenti analoghi
La gestione delle interrogazioni

una chiave primaria o secondaria => B+tree primario o secondario (NL,g e h diversi) clustered o unclustered => ho un piano di accesso diverso!!

Memorizzazione di una relazione

Data Management. Query evaluation. Maurizio Lenzerini, Riccardo Rosati

Strutture fisiche e strutture di accesso ai dati

CALCOLO DEL COSTO DI JOIN. costo di join 1

INDICI, IMPLEMENTAZIONE DI OPERATORI ALGEBRICI E QUERY PROCESSING

Ottimizzazione delle query. Stima dell IO: Per generare i piani si considera: --> Generare e confrontare i piani Query

Introduzione alla valutazione delle interrogazioni. Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 1

Cognome Nome Matricola Ordin.

Ottimizzazione e organizzazione fisica

Scelte nella valutazione dei costi

Basi di Dati e Sistemi Informativi. Organizzazione fisica dei dati. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale

Strutture di accesso ai dati: B + -tree

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Pag Politecnico di Torino 1

Tipi di operatori. Gli operatori dell algebra relazionale sono classificabili nelle seguenti categorie:

Si definisca il relativo schema E/R (nella metodologia proposta a lezione) e si evidenzino eventuali vincoli inespressi e attributi derivati.

SQL e linguaggi di programmazione. Cursori. Cursori. L interazione con l ambiente SQL può avvenire in 3 modi:

FILE E INDICI Architettura DBMS

Algoritmi di ordinamento

Problemi di ordinamento

Parte 6 Esercitazione sull accesso ai file

Organizzazione Fisica dei Dati (Parte II)

Processo di ottimizzazione. Ottimizzatore di Oracle. Execution plan. Esempio. Albero di esecuzione. Ottimizzatore di Oracle Dicembre 2002

Algebra relazionale. Algebra relazionale. Operatori dell algebra relazionale. Operatori dell algebra relazionale. Algebra relazionale.

Data Management Software. Il linguaggio SQL. Query Innestate. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management 10 Settembre 2003

Compito Basi di Dati. Tempo concesso: 2 ore 18 Febbraio 2013 Nome: Cognome: Matricola:

SQL QUERY: Le interrogazioni del database

Operatori di base. σ F (r) = {t t r. F(t) = true} SELEZIONE σ F (r)

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

File e Indici. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Parte III. L algebra relazionale

Compito Basi di Dati. Tempo concesso : 90 minuti 21 Gennaio 05 Nome: Cognome: Matricola: Esercizio 1

Operatori relazionali. Tecnologie delle Basi di Dati M

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java

Equivalenza di Espressioni Algebriche

Gestione e Analisi dei Dati. Lezione 4 Relazioni multi tabella Relazioni uno-a-uno, uno-a-molti, molti-a-molti

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

CALCOLO DEL COSTO DI ACCESSO AI DATI

INTRODUZIONE AL LIVELLO FISICO: FILE, PAGINE, RECORD E INDICI

Analisi algoritmi ricorsivi e relazioni di ricorrenza

Reti combinatorie. Reti combinatorie (segue)

Algoritmo basato su cancellazione di cicli

Il linguaggio SQL: query innestate

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Parte I - Concetti Base ESEMPIO

Introduzione all algebra relazionale. Prof. Giovanni Giuffrida

Dr. C. d'amat LA PROGETTAZIONE FISICA

Compito Sistemi Informativi LS. Tempo concesso : 90 minuti 14 luglio 2010 Nome: Cognome: Matricola:

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. INFORMATICA GENERALE Prof. Alberto Postiglione

SQL. Il nome sta per Structured Query Language Le interrogazioni SQL sono dichiarative

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

Operazioni Relazionali. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto san giovanni

Grafi (non orientati e connessi): minimo albero ricoprente

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

LA PROGETTAZIONE LOGICA

Informatica. Dipartimento di Economia. Ing. Cristiano Gregnanin. 20 ottobre Corso di laurea in Economia

Introduzione alla programmazione

Basi di dati. Selezione, proiezione e join. Linguaggi di interrogazione. Selezione, proiezione e join. Equivalenza di espressioni

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Corso di Access. Prerequisiti. Modulo L2 A (Access) Le query

Esercizi Capitolo 7 - Hash

Algebra relazionale e interrogazioni

Complessità algoritmi su strutture dati

ESECUZIONE QUERY. Decomp. query + Localizzazione dati

Lezione 6. Algebra e Calcolo Relazionale

Esempio: rappresentare gli insiemi

Modulo 8 I data base Unità 5 Le Query

Complementi ed Esercizi di Informatica Teorica II

CAPITOLO V. DATABASE: Il modello relazionale

Esercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

Tecniche di Ordinamento dei Vettori

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Casi di studio per il tuning delle strutture fisiche (Shasha)

Esercitazione 1 Algebra relazionale

Strutture fisiche di accesso

Ogni ufficio è formato da 100 dipendenti, i quali hanno a loro volta 3 clienti ciascuno. Inoltre, ad ogni ufficio sono stati assegnati 4 fornitori.

DATABASE PER IL WEB. Programmazione Web 1

SELECT s.nome, e.data Studenti s, Esami e WHERE e.materia = 'BD' AND e.voto = 30 AND e.matricola = s.matricola

SELECT s.nome, e.data FROM Studenti s, Esami e WHERE e.materia = 'BD' AND e.voto = 30 AND e.matricola = s.matricola

Heap e code di priorità

Schema Del DB Operazionale TELEFONATE

Elementi di Normalizzazione

2.4. Creare ed operare con le query

Ordinamenti per confronto: albero di decisione

Structured Query Language

Basi di Dati Corso di Laura in Informatica Umanistica

DataBase Management System - DBMS

Agenti che risolvono problemi attraverso la ricerca in uno spazio di stati

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Efficienza: esempi. Nella lezione precedente. Fondamenti di Informatica. Ferdinando Cicalese. ! Qualche problema computazionale

Strutture dati per insiemi disgiunti

Complessità algoritmi su strutture dati (riassunto)

2.2 Alberi di supporto di costo ottimo

Basi di dati attive. Paolo Atzeni Stefano Ceri. Basi di dati attive

Capitolo 5. Soluzione: Soluzione in C:

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Transcript:

Metodi per l esecuzione di join L.COD=P.COD L.EDN=E.EDN P.CF = U.CF E.CITTA=U.CITTA PRESTITI LIBRI UTENTI EDITORI Dario Maio http://bias.csr.unibo.it/maio/ dmaio@deis.unibo.it 1 Algoritmi di join: generalità Nell implementazione più semplice il join di due relazioni r e s prevede il confronto di ogni tupla di r con ogni tupla di s, con complessità O(NT r NT s ). La molteplicità di metodi di join in letteratura testimonia lo sforzo compiuto per ridurre l elevato numero di operazioni di I/O che si genera da questa semplice strategia. Il problema dell esecuzione di un join è stato affrontato da diversi punti di vista, tra cui: access path selection: come viene influenzata l esecuzione di un join dal cammino di accesso alle relazioni? optimal nesting: qual è l ordine migliore di esecuzione di n join? clustering: in che modo l ordinamento fisico dei dati incide sui costi del join? buffer: come devono essere allocate le pagine di buffer per favorire l esecuzione di un join? hardware support: qual è un buon supporto hardware per i join? parallel processing: come si sfrutta la presenza di più processori e/o dischi? physical database design: come si determinano gli indici utili all esecuzione di un join? Page 1

Two-way e multi-way join Una prima distinzione riguardante le interrogazioni in cui sono presenti predicati di join è tra: two-way join : coinvolge due relazioni r 1 F r = σ F (r 1 r ) multi-way join : coinvolge più di due relazioni. Un multi-way join tra n relazioni può sempre risolversi tramite l esecuzione di n-1 two-way join, indipendenti l uno dall altro. ESEMPIO: LIBRI L.COD=P.COD PRESTITI P.CF = U.CF UTENTI L.EDN=E.EDN EDITORI E.CITTA=U.CITTA Seleziona tutti gli utenti che hanno preso in prestito libri pubblicati nella città in cui vivono In linea di principio è possibile eseguire un join alla volta, producendo i risultati parziali in relazioni temporanee, come rappresentato dal seguente programma in algebra relazionale in cui, per semplicità, non si considerano le proiezioni: Temp1 Libri Prestiti /* join su COD (codice libro) */ Temp Editori Temp1 /* join su EDN (codice editore) */ Result Utenti Temp /* join su Città e CF (codice fiscale) */ 3 Join: alberi di esecuzione (1) LIBRI PRESTITI UTENTI L.COD=P.COD P.CF = U.CF L.EDN=E.EDN EDITORI E.CITTA=U.CITTA Un join tree che prevede a ogni passo l uso di almeno una table del DB PRESTITI L.COD=P.COD L.EDN=E.EDN E.CITTA=U.CITTA P.CF = U.CF LIBRI EDITORI UTENTI Page

Join: alberi di esecuzione () LIBRI PRESTITI UTENTI L.COD=P.COD P.CF = U.CF L.EDN=E.EDN EDITORI E.CITTA=U.CITTA Un join tree che prevede join fra tabelle temporanee L.COD=P.COD L.EDN=E.EDN P.CF = U.CF E.CITTA=U.CITTA PRESTITI LIBRI UTENTI EDITORI Join: esecuzione in pipeline In molti casi non è necessario che l esecuzione del primo join termini prima dell inizio del secondo. L esecuzione di multi-way join secondo tale modalità è denominata in pipeline, ed è comunemente adottata in molti RDBMS. PRESTITI L.COD=P.COD L.EDN=E.EDN E.CITTA=U.CITTA P.CF = U.CF LIBRI EDITORI UTENTI L esecuzione in pipeline produce le tuple in output secondo il seguente schema: P.COD P.CF... P.COD P.CF L.EDN P3 CCCPLA...... P3 CCCPLA... D.Screto P.. L.COD L.EDN... P3 D.Screto... E.EDN E.CITTA... D.Screto Venezia... 6 Page 3

Piani di esecuzione Esempio di schema natural join a stella: possibili sequenze di esecuzione! =, ognuna composta da 3 join. Ipotizzando di avere a disposizione come algoritmo solo il nested loops, si può limitare lo spazio delle soluzioni adottando alcuni euristici, ad esempio: A C o 1: si escludono i piani di accesso che prevedono prodotti cartesiani o : si sceglie il modo migliore per ottenere una relazione intermedia: ad esempio se AB è migliore di BA non si considerano più BAD e BADC, ma solo ABD e ABDC B D 7 Limitare lo spazio delle soluzioni insieme vuoto A A B C D C B D AB BC BD C A D C A ABC BCD ABD ipotesi: AB migliore di BA BC migliore di CB BD migliore di DB ecc. D A C ABCD 8 Page

Esempio schema a catena A B C D Nell ipotesi di disporre solo di nested loops e applicando le regole 1 e : A B C D AB BC CD ABC BCD ABCD 9 Nested loops join (1) È il metodo di join più semplice e deriva direttamente dalla definizione dell operazione. Una delle due relazioni coinvolte è designata come esterna e l altra come interna. SELECT <select-list> FROM R, S WHERE F R /* predicati locali su R */ AND F S /* predicati locali su S */ AND F J /* predicato/i di join */ L algoritmo, per ogni tupla t r di r che verifica F R, accede a S ricercando tutte le tuple t s che soddisfano F S e che possono concatenarsi con t r. Definiamo SCAN_R e SCAN_S rispettivamente i cammini d accesso su r e su s rispettivamente. Si supponga r esterna e s interna. 10 Page

Nested loops join () /* NESTED-LOOPS ALGORITHM */ OPEN scan... /* SCAN_R */ DO while more-to-come on SCAN_R; NEXT using SCAN_R,...; IF found THEN IF F R THEN DO; OPEN scan... /* SCAN_S */ DO while more-to-come on SCAN_S; NEXT using SCAN_S,...; IF found THEN IF (Fs AND F J ) THEN <join & output selected fields>; END; CLOSE scan SCAN_S; END; END; CLOSE scan SCAN_R; 11 Nested loops: costi di esecuzione Il costo di esecuzione si esprime, in generale, come: C a (r) + ET r C a (s) dove C a (r) è il costo di accesso a r ET r = f FR NT r è il numero atteso di tuple residue di r C a (s) è il costo di accesso a s, per ogni tupla residua di r. Casi notevoli 1. In assenza di predicati locali sulla relazione esterna: C a (r) + NT r C a (s). Facendo uso di scan sequenziali: NP r + ET r NP s 3. Se valgono sia 1 sia il costo diventa: NP r + NT r NP s 1 Page 6

Scelta della relazione esterna Se valgono sia 1 sia il costo diventa: caso r esterna caso s esterna NP r + NT r NP s =NP r + NP r TP r NP s NP s +NT s NP r =NP s + NP s TP s NP r essendo rispettivamente TP r e TP s il numero di tuple per pagina di r e di s. Si deduce che, per relazioni grandi, conviene scegliere come esterna quella con il minor numero di tuple per pagina in quanto ciò minimizza la componente del costo di peso maggiore. Nel caso particolare in cui si abbia TP r =TP s, si sceglie come relazione esterna quella con il minor numero di pagine. 13 Nested loops: cammini di accesso Il cammino di accesso alla relazione esterna determina l ordine (primario) con cui vengono generate le tuple del risultato. PARTI P# DESCR COLORE PESO CITTÀ 13 vite oro 0.0 NA 1 611 bullone nero 0.09 NA 7 chiodo argento 0.0 PG 3 1093 chiave argento 0.0 VE 1101 tassello oro 0.11 PG FORNITORI F# NOME REGIONE CITTÀ 19 ROSSI VENETO VE a 1 VERDI CAMPANIA NA b 96 ROSSI CAMPANIA NA c 1 NERI UMBRIA PG d PARTI FORNITORI Se la relazione esterna è PARTI e si adotta uno scan sequenziale, le tuple vengono generate secondo l ordine: (1b),(1c),(b),(c),(3d),(a),(d) Viceversa, se si accede con un indice su P# l ordine risultante è: (a),(d),(1b),(1c),(3d),(b),(c) 1 Page 7

Cammini di accesso interessanti Nell ipotesi di r esterna e s interna: Per la relazione esterna r: scansione sequenziale accesso via indice (indici) su un attributo (su attributi) che compare (compaiono) nei predicati locali F R. Per la relazione interna s: scansione sequenziale accesso via indice (indici) su un attributo (su attributi) che compare (compaiono) nei predicati locali F S. accesso via indice (indici) su un attributo (su attributi) di join. 1 Nested loops: esempio (1) Sono date le due relazioni: Paper(Pcode,Title,First_Author, Score,Conference,Session) Author(Pcode,Authorcode) I fattori di selettività dei predicati e la query: sono: SELECT Authorcode,Title FROM Paper P, Author A WHERE Score = High Score = High Conference= VLDB 1/ 1/0 AND Conference = VLDB Session = Plenary 1/10 AND Session = Plenary A.Pcode = <valore> 1/000 AND P.Pcode = A.Pcode Le informazioni statistiche rilevanti sono: NTP = 000 NTA = 8000 NPP = 800 NPA = 00 Si assuma che Paper sia la relazione esterna e che esista un indice unclustered sull attributo Session, di altezza, con 0 foglie. 16 Page 8

Nested loops: esempio () Accesso alla relazione esterna (Paper): Facendo uso dell indice IX(P.Session) si ha: C a (IX(P.Session) uncl) = 1 + f p(p.session) NL (P.Session) + Φ(f p(p.session) NT P,NP P ) = 1 + + 31 = 318 Numero di tuple residue della relazione esterna Il numero di tuple residue di Paper è pari a: ET P = f F NT P = (0. 0.0 0.1) 000 = P Accesso alla relazione interna (Author) C a (Seq. Author) = NP A = 00 Il costo complessivo è pertanto 318+ 00 = 1918 Se si disponesse di un indice unclustered su A.Pcode, di altezza 3, con 100 foglie, si avrebbe: C a (IX(A.Pcode) uncl) = + f p(a.pcode) NL (A.Pcode) + Φ (f p(a.pcode) NT A,NP A ) = + 1 + = per un costo complessivo pari a 318 + = 338 17 Nested loops: varianti (1) Zig-Zag: questa variante (Kim 1980) prevede che la relazione interna venga alternativamente letta dall inizio alla fine e dalla fine all inizio. Ciò consente di risparmiare a ogni passo (tranne il primo) la lettura di una pagina della relazione interna, in quanto già presente in memoria, per un costo complessivo pari a: C a (r) + C a (s) + (ET r -1) (C a (s) - 1) Uso di relazioni temporanee: una variante utilizzata in INGRES effettua, prima di verificare la condizione di join, la proiezione e la restrizione delle due relazioni sulla base dei predicati locali e dei campi richiesti nel risultato, facendo uso di due relazioni temporanee r e s. La condizione di join viene verificata accedendo sequenzialmente a entrambe le relazioni temporanee. 18 Page 9

Nested loops: varianti () Per la scelta della relazione (temporanea) esterna, INGRES si basa sull analisi dei costi effettivi, dati da: r esterna: C a (s) + C c (s ) + C a (r) + C c (r ) + NP r + NT r NP s s esterna: C a (s) + C c (s ) + C a (r) + C c (r ) + NP s + NT s NP r dove C c (r ) e C c (s ) indicano, rispettivamente, il costo di costruzione di r e di s. Questa variante preclude l uso di un indice di join sulla relazione interna. Tuttavia, se il numero di pagine della temporanea interna è abbastanza piccolo, il costo globale risulta spesso inferiore a quello del nested-loops classico. Nested-loops parallelo: il nested-loops è un algoritmo di join che ben si presta a essere parallelizzato, ad esempio avendo più processori che elaborano le tuple della relazione esterna e confrontano (in parallelo) quelle residue con le tuple della relazione interna. 19 Nested-block join Nel caso di predicati poco selettivi e/o di scan sequenziale sulla relazione interna il nested-loops può dar luogo a costi proibitivi. L algoritmo di nested-block join riduce il numero di scan sulla relazione interna, e quindi i costi di I/O, facendo uso di un buffer di BP pagine, di cui BP-1 sono riservate per la lettura della relazione esterna e 1 per la relazione interna. Per ogni gruppo di BP-1 pagine di R (esterna) caricate nel buffer si apre uno scan su S (interna). 1 NPr BP-1 1 passo di copia r esterna loop di match buffer di BP pagine s interna 0 Page 10

Nested-block: algoritmo L algoritmo può essere descritto concisamente come segue, assumendo che B_R sia il buffer per la relazione esterna, B_S quello di 1 pagina per la relazione interna e <match B_R and B_S tuples> indichi la procedura che esegue il join delle tuple nel buffer, verificando i predicati locali e quello/i di join. /* NESTED-BLOCK ALGORITHM */ OPEN scan... /* SCAN_R */ DO while more-to-come on SCAN_R; FILL_BUFFER B_R; OPEN scan... /* SCAN_S */ DO while more-to-come on SCAN_S; FILL_BUFFER B_S; <match B_R and B_S tuples> <output selected fields>; FREE_BUFFER B_S; END; CLOSE scan SCAN_S; FREE_BUFFER B_R; END; CLOSE scan SCAN_R; 1 Nested-block: costi L ordine delle tuple nel risultato è diverso rispetto a quello del nested-loops, ovvero le tuple non vengono più prodotte rispettando l ordinamento logico stabilito dal cammino d accesso alla relazione esterna. Il costo dell algoritmo, nel caso di scan sequenziali e assenza di predicati locali, è pari a: NP r + NP r /(BP-1) NP s Facendo uso di indici vale quanto visto per il nested-loops, ovvero NP r e NP s diventano rispettivamente C a (r) e C a (s); ad esempio: C a (r) + EP p(r.ai) /(BP-1) C a (s) dove EP p(r.ai) indica il numero di pagine dati di r reperite dallo scan sull indice IX(R.Ai) usando il predicato p(r.a i ). Per stimare C a (s) nel caso di accesso con indice su attributo di join, si considera l estrazione dei valori di join di r dal buffer e l esecuzione di una query di set sulla relazione esterna s. Page 11

Sort-Merge join Il sort-merge join viene eseguito in due passi. Nel primo passo (sort) le relazioni vengono ordinate sugli attributi di join. Durante il secondo passo (merge) entrambe le relazioni vengono scandite nell ordine degli attributi di join e le tuple che soddisfano la condizione di join vengono fuse per costituire il risultato. La forma dell algoritmo dipende dal tipo di join (operatore ϑ) e dal fatto che gli attributi di join siano o meno a valori unici. Nel caso di equi-join R.J = S.J, con R.J chiave primaria e S.J chiave importata (foreign key), e in assenza di predicati locali /* SORT-MERGE ALGORITHM */ /* Sort phase */ sort relation r on R.J; sort relation s on S.J; /* Merge phase */ getnext(t r ); getnext(t s ); while not EOF(r) and not EOF(s) do { if t r [J]=t s [J] then { <join & output selected fields>; getnext(t s ); } else if t r [J]<t s [J] then getnext(t r ) else getnext(t s ) } 3 Sort-Merge join: costi Il sort-merge join nel caso considerato comporta un costo pari a: C(Sort r) + C(Sort s) + NP r + NP s assumendo di leggere tutte le pagine delle relazioni ordinate. Sempre riferendosi a equi-join tra primary e foreign key, il costo della fase di merge può essere minore se max(r.j) > max(s.j), in quanto non è necessario leggere tutte le tuple di r. In presenza di predicati locali è possibile effettuare preventivamente la proiezione e la restrizione delle due relazioni, memorizzando i risultati in due temporanee che poi vengono ordinate sull attributo di join. Page 1

Sort-Merge join con place holder In presenza di valori duplicati per entrambi gli attributi di join (associazione del tipo m:n), è necessario modificare l algoritmo per poter effettuare backtracking. r esterna s interna 10 10 0 10 10 10 1 puntatore di gruppo Le tuple delle due relazioni vengono scandite parallelamente per valori crescenti dell attributo di join. Un puntatore di gruppo ( place holder ) individua, a ogni passo, la prima tupla della relazione interna che verifica il predicato di join con la corrente tupla esterna. SM-join con place holder: costi Rispetto al caso precedente, in generale si ha un incremento dei costi di accesso alla relazione interna. Sotto le ipotesi che alla relazione interna s sia riservata una sola pagina di buffer e che NP s /NK S.J > 1 (altrimenti non si leggerebbe più di una volta la stessa pagina di s), il costo di accesso a s è valutabile nel caso peggiore come: NT r NP s /NK S.J Il vantaggio del sort-merge rispetto al nested-loops è evidente se le relazioni sono già ordinate. Se la selettività del join, definita come: f R >< F S J R S F = = J cardinalità del join cardinalità del prodotto cartesiano è bassa, il numero di tuple confrontate è considerevolmente inferiore. Infatti non è necessario riscandire le tuple della relazione interna che precedono il puntatore di gruppo. 6 Page 13

Merging scans join (1) È una generalizzazione dell algoritmo di sort-merge che richiede unicamente di poter accedere alle tuple secondo l ordine stabilito dai valori degli attributi di join. Si consideri un equi-join R.J e S.J. Se esistono gli indici IX(R.J) e IX(S.J), non è necessario eseguire il sort, ma si possono usare gli indici per accedere alle tuple secondo l ordine desiderato. R J 1 7 11 1 1 IX(R.J) IX(S.J) J 11 1 7 S 7 Merging scans join () Se entrambi i cammini di accesso sono via indici unclustered, il costo può risultare comunque elevato. L algoritmo di merging-scans si differenzia da quello di nestedloops anche quando entrambi utilizzano IX(S.J) per accedere a S, in quanto nested-loops riapre ogni volta lo scan, mentre mergingscans fa uso di place holder sulle foglie ed esegue un singolo scan. Se l accesso a S è sequenziale, e S è clustered sull attributo di join, la situazione peggiora per il nested-loops, che esegue ogni volta uno scan completo della relazione. R J 1 7 11 1 IX(R.J) nested-loops merging-scans J 7 S 8 Page 1

Simple hash join (1) Il successo del sort-merge (e del merging-scans) è principalmente dovuto al fatto che riduce il numero di confronti fra le tuple delle relazioni coinvolte. I metodi che usano tecniche hash mirano a ottenere lo stesso effetto evitando l ordinamento delle relazioni e senza richiedere l uso di indici sugli attributi di join. La famiglia dei join basati su tecniche hash, utilizzabili nel caso di equi-join (a meno di non fare uso di funzioni hash che preservano l ordine), presenta in generale prestazioni migliori rispetto ad altri metodi. L algoritmo di simple-hash join è tra i più semplici della famiglia, e consta di due passi: passo 1 (build): si applica una funzione hash H ai valori degli attributi di join di una delle due relazioni (s) generando una hash table H_s. Si usa un vettore di bit V per tener traccia di quali bucket di H_s sono vuoti o meno. La relazione s è detta interna. passo (probe): si scandisce la seconda relazione (r), detta esterna, e, per ogni tupla, si accede a H_s tramite la stessa funzione hash H, solo se il bucket colpito non è vuoto. 9 Simple hash join () R J 1 7 11 1 H passo : probe V 1 0 1 H_S 1 6 7 H passo 1: build J 6 7 S 30 Page 1

Simple hash join (3) L algoritmo di simple-hash join, nel caso R.J =S.J e senza predicati locali, si esprime come segue: /* SIMPLE-HASH ALGORITHM */ /* Phase 1 */ FOR EACH t s DO { i = H(t s [J]); V[i] = 1; INSERT(t s,h_s[i]) } ; /* Phase */ FOR EACH t r DO { i = H(t r [J]); IF V[i] = 1 THEN {READ(H_s[i]); FOR EACH t s IN H_s[i] DO IF t r [J]=t s [J] THEN <join & output selected fields> }; 31 Simple hash join () Una valutazione di prima approssimazione del costo è: NP s + NT s + NP r + NT r NP s + NT s è il costo del passo 1 (lettura di s e costruzione di H_s) NP r + NT r è il costo del passo (lettura di r e accesso a H_s) Osservazioni La relazione utilizzata per costruire la hash table è di solito quella con minore cardinalità, o con il minor numero di tuple residue nel caso siano presenti anche predicati locali. L efficienza decresce all aumentare delle collisioni, in quanto cresce il numero di accessi e confronti inutili. Il metodo consente, con un semplice variante, di eseguire left e right outer-join. Unità hardware per l hashing hanno l implementazione hardware di questo metodo. reso fattibile 3 Page 16