View a markdown version of this page

MEMBUAT STATISTIK - Amazon Aurora DSQL

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

MEMBUAT STATISTIK

Sintaksis yang didukung

CREATE STATISTICS [ [ IF NOT EXISTS ] statistics_name ] ON ( expression ) FROM table_name CREATE STATISTICS [ [ IF NOT EXISTS ] statistics_name ] [ ( statistics_kind [, ... ] ) ] ON { column_name | ( expression ) }, { column_name | ( expression ) } [, ...] FROM table_name

Deskripsi

CREATE STATISTICSakan membuat data pelacakan objek statistik baru yang diperluas tentang tabel yang ditentukan. Objek statistik akan dibuat dalam database saat ini dan akan dimiliki oleh pengguna yang mengeluarkan perintah.

Per CREATE STATISTICS intah ini memiliki dua bentuk dasar. Bentuk pertama memungkinkan statistik univariat untuk satu ekspresi dikumpulkan, memberikan manfaat yang mirip dengan indeks ekspresi tanpa overhead pemeliharaan indeks. Formulir ini tidak mengizinkan jenis statistik untuk ditentukan, karena berbagai jenis statistik hanya merujuk pada statistik multivariat. Bentuk kedua dari perintah memungkinkan statistik multivariat pada beberapa and/or ekspresi kolom dikumpulkan, secara opsional menentukan jenis statistik mana yang akan disertakan. Formulir ini juga akan secara otomatis menyebabkan statistik univariat dikumpulkan pada ekspresi apa pun yang termasuk dalam daftar.

Jika nama skema diberikan (misalnya,CREATE STATISTICS myschema.mystat ...) maka objek statistik dibuat dalam skema yang ditentukan. Jika tidak, itu dibuat dalam skema saat ini. Jika diberikan, nama objek statistik harus berbeda dari nama objek statistik lainnya dalam skema yang sama.

Parameter

IF NOT EXISTS

Jangan memunculkan kesalahan jika objek statistik dengan nama yang sama sudah ada. Pemberitahuan dikeluarkan dalam kasus ini. Perhatikan bahwa hanya nama objek statistik yang dipertimbangkan di sini, bukan detail definisinya. Nama statistik diperlukan ketika IF NOT EXISTS ditentukan.

statistics_name

Nama (opsional memenuhi syarat skema) dari objek statistik yang akan dibuat. Jika nama dihilangkan, Aurora DSQL memilih nama yang sesuai berdasarkan nama tabel induk dan and/or ekspresi nama kolom yang ditentukan.

statistics_kind

Jenis statistik multivariat yang akan dihitung dalam objek statistik ini. Jenis yang saat ini didukung adalahndistinct, yang memungkinkan statistik n-berbeda,dependencies, yang memungkinkan statistik ketergantungan fungsional, dan mcv yang memungkinkan daftar nilai paling umum. Jika klausa ini dihilangkan, semua jenis statistik yang didukung disertakan dalam objek statistik. Statistik ekspresi univariat dibangun secara otomatis jika definisi statistik mencakup ekspresi kompleks dan bukan hanya referensi kolom sederhana.

column_name

Nama kolom tabel yang akan dicakup oleh statistik yang dihitung. Ini hanya diperbolehkan saat membangun statistik multivariat. Setidaknya dua nama kolom atau ekspresi harus ditentukan, dan urutannya tidak signifikan.

expression

Ekspresi yang akan dicakup oleh statistik yang dihitung. Ini dapat digunakan untuk membangun statistik univariat pada satu ekspresi, atau sebagai bagian dari daftar and/or ekspresi beberapa nama kolom untuk membangun statistik multivariat. Dalam kasus terakhir, statistik univariat terpisah dibangun secara otomatis untuk setiap ekspresi dalam daftar.

table_name

Nama (opsional memenuhi syarat skema) dari tabel yang berisi kolom tempat statistik dihitung.

Catatan

Anda harus menjadi pemilik tabel untuk membuat objek statistik membacanya. Namun, setelah dibuat, kepemilikan objek statistik tidak bergantung pada tabel yang mendasarinya.

Statistik ekspresi bersifat per-ekspresi dan mirip dengan membuat indeks pada ekspresi, kecuali bahwa mereka menghindari overhead pemeliharaan indeks. Statistik ekspresi dibuat secara otomatis untuk setiap ekspresi dalam definisi objek statistik.

Statistik yang diperluas saat ini tidak digunakan oleh perencana untuk estimasi selektivitas yang dibuat untuk gabungan tabel.

Di Aurora DSQL, Anda dapat membuat paling banyak 5 objek statistik yang diperluas pada satu tabel. Jika Anda melebihi batas ini, Aurora DSQL mengembalikan kesalahanmore than 5 extended statistics per table are not allowed. Untuk informasi selengkapnya, lihat Batas database di Aurora DSQL.

Contoh

Buat tabel t1 dengan dua kolom yang bergantung secara fungsional, yaitu, pengetahuan tentang nilai di kolom pertama cukup untuk menentukan nilai di kolom lainnya. Kemudian statistik ketergantungan fungsional dibangun di atas kolom tersebut:

CREATE TABLE t1 ( a int, b int ); INSERT INTO t1 SELECT i/100, i/500 FROM generate_series(1,1000000) s(i); ANALYZE t1; -- the number of matching rows will be drastically underestimated: EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0); CREATE STATISTICS s1 (dependencies) ON a, b FROM t1; ANALYZE t1; -- now the row count estimate is more accurate: EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);

Tanpa statistik ketergantungan fungsional, perencana akan berasumsi bahwa kedua WHERE kondisi tersebut independen, dan akan melipatgandakan selektivitas mereka bersama-sama untuk sampai pada perkiraan jumlah baris yang terlalu kecil. Dengan statistik seperti itu, perencana mengakui bahwa WHERE kondisinya berlebihan dan tidak meremehkan jumlah baris.

Buat tabel t2 dengan dua kolom berkorelasi sempurna (berisi data identik), dan daftar MCV pada kolom tersebut:

CREATE TABLE t2 ( a int, b int ); INSERT INTO t2 SELECT mod(i,100), mod(i,100) FROM generate_series(1,1000000) s(i); CREATE STATISTICS s2 (mcv) ON a, b FROM t2; ANALYZE t2; -- valid combination (found in MCV) EXPLAIN ANALYZE SELECT * FROM t2 WHERE (a = 1) AND (b = 1); -- invalid combination (not found in MCV) EXPLAIN ANALYZE SELECT * FROM t2 WHERE (a = 1) AND (b = 2);

Daftar MCV memberikan informasi yang lebih rinci kepada perencana tentang nilai-nilai spesifik yang biasanya muncul dalam tabel, serta batas atas pada selektivitas kombinasi nilai yang tidak muncul dalam tabel, memungkinkannya menghasilkan perkiraan yang lebih baik dalam kedua kasus.