Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Esempi di distribuzione
Gli esempi seguenti mostrano come i dati vengono distribuiti in base alle opzioni definite nell'istruzione. CREATE TABLE
DISTKEYesempi
Guarda lo schema della USERS tabella nel TICKIT database. USERIDè definito come la SORTKEY colonna e la DISTKEY colonna:
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'users'; column | type | encoding | distkey | sortkey ---------------+------------------------+----------+---------+--------- userid | integer | none | t | 1 username | character(8) | none | f | 0 firstname | character varying(30) | text32k | f | 0 ...
USERIDè una buona scelta per la colonna di distribuzione di questa tabella. Se si esegue una query sulla vista di DISKUSAGE sistema SVV _, si può vedere che la tabella è distribuita in modo molto uniforme. I numeri di colonna sono a base zero, così come USERID la colonna 0.
select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name='users' and col=0 and rows>0 order by slice, col; slice| col | rows | minvalue | maxvalue -----+-----+-------+----------+---------- 0 | 0 | 12496 | 4 | 49987 1 | 0 | 12498 | 1 | 49988 2 | 0 | 12497 | 2 | 49989 3 | 0 | 12499 | 3 | 49990 (4 rows)
La tabella contiene 49.990 righe. Le colonne delle righe (num_values) mostrano che ogni sezione contiene approssimativamente lo stesso numero di righe. Le colonne minvalue e maxvalue mostrano l'intervallo di valori su ogni sezione. Ogni sezione include quasi l'intero intervallo di valori, quindi ci sono buone probabilità che ogni sezione partecipi all'esecuzione di una query che filtra per un intervallo di utenti. IDs
Questo esempio dimostra la distribuzione su un piccolo sistema di test. Il numero totale delle sezioni è solitamente più alto.
Se di solito vi unite o raggruppate utilizzando la STATE colonna, potreste scegliere di distribuirla sulla colonna. STATE L'esempio seguente mostra un caso in cui si crea una nuova tabella con gli stessi dati della USERS tabella ma li DISTKEY si imposta sulla STATE colonna. In questo caso, la distribuzione non è altrettanto uniforme. La sezione 0 (13.587 righe) contiene approssimativamente il 30% di righe in più rispetto alla sezione 3 (10.150 righe). In una tabella più grande, il totale della differenza di distribuzione potrebbe avere un impatto avverso sull'elaborazione di query.
create table userskey distkey(state) as select * from users; select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'userskey' and col=0 and rows>0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 13587 | 5 | 49989 1 | 0 | 11245 | 2 | 49990 2 | 0 | 15008 | 1 | 49976 3 | 0 | 10150 | 4 | 49986 (4 rows)
DISTSTYLEEVENesempio
Se crei una nuova tabella con gli stessi dati della USERS tabella ma la imposti suEVEN, DISTSTYLE le righe vengono sempre distribuite uniformemente tra le sezioni.
create table userseven diststyle even as select * from users; select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'userseven' and col=0 and rows>0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 12497 | 4 | 49990 1 | 0 | 12498 | 8 | 49984 2 | 0 | 12498 | 2 | 49988 3 | 0 | 12497 | 1 | 49989 (4 rows)
Ad ogni modo, dato che la distribuzione non è basata su una colonna specifica, l'elaborazione di query può essere degradata, soprattutto se la tabella viene combinata su un'altra tabella. La mancanza di distribuzione su una colonna di combinazione, spesso influenza il tipo di operazione di combinazione che può essere eseguita in modo efficiente. Le operazioni di combinazione, aggregazione e raggruppamento sono ottimizzate quando entrambe le tabelle vengono distribuite e ordinate sulle loro rispettive colonne di combinazione.
DISTSTYLEALLesempio
Se crei una nuova tabella con gli stessi dati della USERS tabella ma lo DISTSTYLE imposti suALL, tutte le righe vengono distribuite nella prima sezione di ogni nodo.
select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'usersall' and col=0 and rows > 0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 49990 | 4 | 49990 2 | 0 | 49990 | 2 | 49990 (4 rows)