CREATE STATISTICS
CREATE STATISTICS â ÑоздаÑÑ ÑаÑÑиÑеннÑÑ ÑÑаÑиÑÑикÑ
СинÑакÑиÑ
CREATE STATISTICS [ IF NOT EXISTS ]имÑ_ÑÑаÑиÑÑики[ (вид_ÑÑаÑиÑÑики[, ... ] ) ] ONимÑ_ÑÑолбÑа,имÑ_ÑÑолбÑа[, ...] FROMимÑ_ÑаблиÑÑ
ÐпиÑание
Ðоманда CREATE STATISTICS ÑоздаÑÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ ÑаÑÑиÑенной ÑÑаÑиÑÑики, оÑÑлеживаÑÑий даннÑе опÑеделÑнной ÑаблиÑÑ, ÑÑоÑонней ÑаблиÑÑ Ð¸Ð»Ð¸ маÑеÑиализованного пÑедÑÑавлениÑ. ÐбÑÐµÐºÑ ÑÑаÑиÑÑики бÑÐ´ÐµÑ Ñоздан в ÑекÑÑей базе даннÑÑ
, и его владелÑÑем ÑÑÐ°Ð½ÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, вÑполнÑÑÑий командÑ.
ÐÑли задано Ð¸Ð¼Ñ ÑÑ
ÐµÐ¼Ñ (напÑимеÑ, CREATE STATISTICS myschema.mystat ...), обÑÐµÐºÑ ÑÑаÑиÑÑики ÑоздаÑÑÑÑ Ð² Ñказанной ÑÑ
еме, в пÑоÑивном ÑлÑÑае â в ÑекÑÑей. ÐÐ¼Ñ Ð¾Ð±ÑекÑа ÑÑаÑиÑÑики должно оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¸Ð¼Ñн дÑÑгиÑ
обÑекÑов ÑÑаÑиÑÑики в ÑÑой ÑÑ
еме.
ÐаÑамеÑÑÑ
IF NOT EXISTSÐе ÑÑиÑаÑÑ Ð¾Ñибкой, еÑли обÑÐµÐºÑ ÑÑаÑиÑÑики Ñ Ñаким именем Ñже ÑÑÑеÑÑвÑеÑ. Ð ÑÑом ÑлÑÑае бÑÐ´ÐµÑ Ð²Ñдано замеÑание. ÐамеÑÑÑе, ÑÑо пÑи ÑÑом пÑовеÑÑеÑÑÑ ÑолÑко Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа, а не Ñ Ð°ÑакÑеÑиÑÑики его опÑеделениÑ.
имÑ_ÑÑаÑиÑÑикиÐÐ¼Ñ Ñоздаваемого обÑекÑа ÑÑаÑиÑÑики (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹).
вид_ÑÑаÑиÑÑикиÐид ÑÑаÑиÑÑики, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²ÑÑиÑлÑÑÑÑÑ Ð² ÑÑом обÑекÑе. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑÑаÑиÑÑика
ndistinct, подÑÑÑÑ ÑиÑла ÑазлиÑнÑÑ Ð·Ð½Ð°Ñений, иdependencies, опÑеделение ÑÑнкÑионалÑнÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑей. ÐÑли ÑÑо пÑедложение опÑÑено, в обÑÐµÐºÑ ÑÑаÑиÑÑики вклÑÑаÑÑÑÑ Ð²Ñе поддеÑживаемÑе Ð²Ð¸Ð´Ñ ÑÑаÑиÑÑики. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 14.2.2 и РазделÑ 65.2.имÑ_ÑÑолбÑаÐÐ¼Ñ ÑÑолбÑа ÑаблиÑÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð¿Ð¾ÐºÑÑваÑÑÑÑ Ð²ÑÑиÑлÑемой ÑÑаÑиÑÑикой. ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑказаÑÑ Ð¸Ð¼ÐµÐ½Ð° минимÑм двÑÑ ÑÑолбÑов.
имÑ_ÑаблиÑÑÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) ÑаблиÑÑ, ÑодеÑжаÑей ÑÑолбÑÑ, по коÑоÑÑм ÑоздаÑÑÑÑ ÑÑаÑиÑÑика; об оÑобенноÑÑÑÑ , ÑвÑзаннÑÑ Ñ Ð½Ð°Ñледованием и ÑекÑиониÑованием, ÑаÑÑказÑваеÑÑÑ Ð² опиÑании ANALYZE.
ÐамеÑаниÑ
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ ÑÑаÑиÑÑики, ÑиÑаÑÑий ÑаблиÑÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ бÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем ÑÑой ÑаблиÑÑ. ÐоÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа ÑÑаÑиÑÑики его Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑеделÑÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°Ñей ÑаблиÑÑ.
ÐÑимеÑÑ
СоздайÑе ÑаблиÑÑ t1 Ñ Ð´Ð²ÑÐ¼Ñ ÑÑнкÑионалÑно завиÑимÑми ÑÑолбÑами; Ñо еÑÑÑ Ð·Ð½Ð°Ð½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑÑолбÑа доÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ð·Ð½Ð°Ñение дÑÑгого. ÐаÑем Ð´Ð»Ñ ÑÑиÑ
ÑÑолбÑов поÑÑÑойÑе ÑÑаÑиÑÑÐ¸ÐºÑ ÑÑнкÑионалÑной завиÑимоÑÑи:
CREATE TABLE t1 (
a int,
b int
);
INSERT INTO t1 SELECT i/100, i/500
FROM generate_series(1,1000000) s(i);
ANALYZE t1;
-- ÑиÑло ÑовпадаÑÑиÑ
ÑÑÑок бÑÐ´ÐµÑ ÐºÐ°ÑаÑÑÑоÑиÑеÑки недооÑенено:
EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);
CREATE STATISTICS s1 (dependencies) ON a, b FROM t1;
ANALYZE t1;
-- ÑепеÑÑ Ð¾Ñенка ÑиÑла ÑÑÑок ÑÑала ÑоÑнее:
EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0); Ðез ÑÑаÑиÑÑики ÑÑнкÑионалÑной завиÑимоÑÑи планиÑовÑик пÑедположил бÑ, ÑÑо два ÑÑÐ»Ð¾Ð²Ð¸Ñ WHERE незавиÑÐ¸Ð¼Ñ Ð´ÑÑг Ð¾Ñ Ð´ÑÑга, и пеÑемножил Ð±Ñ Ð¸Ñ
оÑенки избиÑаÑелÑноÑÑи, ÑÑо дало Ð±Ñ ÑлиÑком заниженнÑÑ Ð¾ÑÐµÐ½ÐºÑ ÑиÑла ÑÑÑок. Ðднако Ñ Ñозданной ÑÑаÑиÑÑикой планиÑовÑик понимаеÑ, ÑÑо ÑÑÐ»Ð¾Ð²Ð¸Ñ WHERE избÑÑоÑнÑ, и не оÑибаеÑÑÑ Ñ ÑÑой оÑенкой.
СовмеÑÑимоÑÑÑ
Ðоманда CREATE STATISTICS оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.