W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
CREATE STATISTICS — 定義擴(kuò)展統(tǒng)計
CREATE STATISTICS [ IF NOT EXISTS ] statistics_name
[ ( statistics_kind
[, ... ] ) ]
ON column_name
, column_name
[, ...]
FROM table_name
CREATE STATISTICS
將創(chuàng)建一個新的擴(kuò)展統(tǒng)計對象, 追蹤指定表、外部表或物化視圖的數(shù)據(jù)。該統(tǒng)計對象將在當(dāng)前數(shù)據(jù)庫中創(chuàng)建, 被發(fā)出該命令的用戶所有。
如果給定了模式名(比如,CREATE STATISTICS myschema.mystat ...
), 那么在給定的模式中創(chuàng)建統(tǒng)計對象。否則在當(dāng)前模式中創(chuàng)建。 統(tǒng)計對象的名稱必須與相同模式中的任何其他統(tǒng)計對象不同。
IF NOT EXISTS
如果具有相同名稱的統(tǒng)計對象已經(jīng)存在,不會拋出一個錯誤,只會發(fā)出一個提示。 請注意,這里只考慮統(tǒng)計對象的名稱,不考慮其定義細(xì)節(jié)。
statistics_name
要創(chuàng)建的統(tǒng)計對象的名稱(可以有模式限定)。
statistics_kind
在此統(tǒng)計對象中計算的統(tǒng)計種類。目前支持的種類是啟用n-distinct統(tǒng)計的 ndistinct
,啟用功能依賴性統(tǒng)計的dependencies
,以及啟用最常見的值列表的mcv
。 如果省略該子句,則統(tǒng)計對象中將包含所有支持的統(tǒng)計類型。 有關(guān)更多信息,請參閱第 14.2.2 節(jié)和 第 70.2 節(jié)。
column_name
被計算的統(tǒng)計信息包含的表格列的名稱。至少必須給出兩個列名,列名的順序可以忽略。
table_name
包含計算統(tǒng)計信息的列的表的名稱(可以是模式限定的)。
你必須是表的所有者才能創(chuàng)建讀取它的統(tǒng)計對象。不過,一旦創(chuàng)建, 統(tǒng)計對象的所有權(quán)與基礎(chǔ)表無關(guān)。
用兩個功能相關(guān)的列創(chuàng)建表t1
, 即第一列中的值的信息足以確定另一列中的值。然后, 在這些列上構(gòu)建函數(shù)依賴關(guān)系統(tǒng)計信息:
CREATE TABLE t1 (
a int,
b int
);
INSERT INTO t1 SELECT i/100, i/500
FROM generate_series(1,1000000) s(i);
ANALYZE t1;
-- 匹配行的數(shù)量將被大大低估:
EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);
CREATE STATISTICS s1 (dependencies) ON a, b FROM t1;
ANALYZE t1;
-- 現(xiàn)在行計數(shù)估計會更準(zhǔn)確:
EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);
如果沒有函數(shù)依賴性統(tǒng)計,規(guī)劃器會認(rèn)為兩個WHERE
條件是獨立的, 并且會將它們的選擇性乘以一起,以致得到太小的行數(shù)估計。 通過這樣的統(tǒng)計,規(guī)劃器認(rèn)識到WHERE
條件是多余的,并且不會低估行數(shù)。
創(chuàng)建表t2
與兩個完全相關(guān)的列(包含相同的數(shù)據(jù)),并且在這些列上創(chuàng)建一個MCV列表:
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);
MCV列表為計劃器提供了關(guān)于表中普遍出現(xiàn)的特定值的更詳細(xì)的信息,以及表中未顯示的值組合的選擇性上限,允許它在這兩種情況下產(chǎn)生更好的估計值。
SQL標(biāo)準(zhǔn)中沒有CREATE STATISTICS
命令。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: