2009-05-08 3 views

risposta

0

In questo caso dovresti vedere come salvare i dati in b-tree dopo che penso che capirai l'algoritmo JOIN.

2

Non ci sono algoritmi diversi, a seconda del server database, indici e ordine dei dati (PK cluster), se i valori calcolati sono uniti o no ecc

Date un'occhiata a un piano di query, che la maggior parte dei sistemi SQL può crea una query, dovrebbe darti un'idea di cosa fa.

+0

qualsiasi articolo per cominciare? – henry

+0

Che motore DB? – Lucero

+0

preferibilmente MySql – henry

-2

Crea un prodotto cartesiano delle due tabelle e quindi seleziona le righe al di fuori di esso. Leggi il libro di Korth su Database per lo stesso.

+4

Sono abbastanza sicuro che non è vero, produrre un prodotto cartesiano sarebbe molto inefficiente – codeulike

+0

Sono abbastanza sicuro che questo è ciò che c'è nel libro scritto da Korth. I database moderni potrebbero non farlo. – Geek

+1

Se si esegue un join esterno completo con una condizione che non può essere calcolata prima di unirsi, questo * potrebbe * essere ciò che accade. Ma per le interazioni interne, non avrebbe molto senso, dal momento che produce troppi record. – Lucero

2

In MS Sql, diversi algoritmi di join verranno utilizzati in diverse situazioni a seconda delle tabelle (la loro dimensione, che tipo di indici sono disponibili, ecc.). Immagino che altri motori DB utilizzino anche una varietà di algoritmi.

I principali tipi di join utilizzato da Ms Sql sono:
- cicli annidati si unisce
- merge join
- Hash si unisce

Si può leggere di più su di loro in questa pagina: Msdn -Advanced Query Tuning Concepts

Se ottieni SQL per visualizzare il 'piano di esecuzione' per le tue query, sarai in grado di vedere quale tipo di join viene utilizzato in diverse situazioni.

+0

Riesci a far luce su quali Algoritmi? – Geek

+0

Vedere il link msdn nella mia risposta. Quella pagina collega a tre ulteriori "intese ..." pagine che descrivono l'algoritmo di base che SQL segue in ciascun caso. – codeulike

2

Dipende dal database in uso, da quello che si sta unendo (grande/piccolo, in sequenza/casuale, indicizzato/non indicizzato, ecc.).

Ad esempio, SQL Server ha diversi algoritmi di join; loop join, unione di join, hash join. Quale viene utilizzato è determinato dall'ottimizzatore quando sta elaborando un piano di esecuzione. Talvolta commette un errore di valutazione e puoi quindi forzare uno specifico algoritmo di join utilizzando i suggerimenti per il join.

Si possono trovare le seguenti pagine MSDN interessanti:
http://msdn.microsoft.com/en-us/library/ms191318.aspx (anello)
http://msdn.microsoft.com/en-us/library/ms189313.aspx (hash)
http://msdn.microsoft.com/en-us/library/ms190967.aspx (merge)
http://msdn.microsoft.com/en-us/library/ms173815.aspx (suggerimenti)

0

Tutti teoria degli insiemi base, stato intorno un po ' . Cerca di non collegare troppe tabelle in qualsiasi momento, sembra conk delle risorse del database con tutte le scansioni. Gli indici aiutano con le prestazioni, guardano alcuni siti sql e cercano l'ottimizzazione delle query SQL per ottenere alcune informazioni. SQL Management Studio include alcune utilità di programma di esecuzione integrate che sono spesso interessanti, soprattutto per query complesse di grandi dimensioni.

0

L'ottimizzatore sceglierà (o dovrebbe) scegliere il join più veloce.

Tuttavia ci sono due tipi diversi di determinare ciò che è veloce:

  1. si misura il tempo che ci vuole per tornare tutte le righe unite.
  2. È possibile misurare il tempo necessario per restituire le prime righe unite.

Se si desidera restituire tutte le righe il più velocemente possibile, l'ottimizzatore sceglierà spesso un join hash o un join unione. Se si desidera restituire le prime poche righe il più velocemente possibile, l'ottimizzatore sceglierà i loop nidificati.