Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh distribusi
Contoh berikut menunjukkan bagaimana data didistribusikan sesuai dengan opsi yang Anda tentukan dalam CREATE TABLE pernyataan.
DISTKEYcontoh
Lihatlah skema USERS tabel dalam TICKIT database. USERIDdidefinisikan sebagai SORTKEY kolom dan DISTKEY kolom:
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 ...
USERIDadalah pilihan yang baik untuk kolom distribusi pada tabel ini. Jika Anda menanyakan tampilan DISKUSAGE sistem SVV _, Anda dapat melihat bahwa tabel didistribusikan dengan sangat merata. Nomor kolom berbasis nol, begitu juga kolom USERID 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)
Tabel berisi 49.990 baris. Kolom baris (num_values) menunjukkan bahwa setiap irisan berisi jumlah baris yang hampir sama. Kolom minvalue dan maxvalue menunjukkan rentang nilai pada setiap irisan. Setiap irisan mencakup hampir seluruh rentang nilai, jadi ada kemungkinan besar setiap irisan berpartisipasi dalam menjalankan kueri yang memfilter untuk berbagai pengguna. IDs
Contoh ini menunjukkan distribusi pada sistem uji kecil. Jumlah total irisan biasanya jauh lebih tinggi.
Jika Anda biasanya bergabung atau mengelompokkan menggunakan STATE kolom, Anda dapat memilih untuk mendistribusikan pada STATE kolom. Contoh berikut menunjukkan kasus di mana Anda membuat tabel baru dengan data yang sama seperti USERS tabel tetapi mengatur DISTKEY ke STATE kolom. Dalam hal ini, distribusinya tidak genap. Slice 0 (13.587 baris) memegang sekitar 30 persen lebih banyak baris daripada slice 3 (10.150 baris). Dalam tabel yang jauh lebih besar, jumlah kemiringan distribusi ini dapat berdampak buruk pada pemrosesan kueri.
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)
DISTSTYLEEVENcontoh
Jika Anda membuat tabel baru dengan data yang sama dengan USERS tabel tetapi mengatur DISTSTYLE keEVEN, baris selalu didistribusikan secara merata di seluruh irisan.
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)
Namun, karena distribusi tidak didasarkan pada kolom tertentu, pemrosesan kueri dapat terdegradasi, terutama jika tabel bergabung dengan tabel lain. Kurangnya distribusi pada kolom bergabung sering mempengaruhi jenis operasi gabungan yang dapat dilakukan secara efisien. Operasi gabungan, agregasi, dan pengelompokan dioptimalkan saat kedua tabel didistribusikan dan diurutkan pada kolom penggabungannya masing-masing.
DISTSTYLEALLcontoh
Jika Anda membuat tabel baru dengan data yang sama dengan USERS tabel tetapi mengatur DISTSTYLE keALL, semua baris didistribusikan ke irisan pertama dari setiap node.
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)