CREATE STATISTICS
CREATE STATISTICS â ÑоздаÑÑ ÑаÑÑиÑеннÑÑ ÑÑаÑиÑÑикÑ
СинÑакÑиÑ
CREATE STATISTICS [ IF NOT EXISTS ]имÑ_ÑÑаÑиÑÑики[ (вид_ÑÑаÑиÑÑики[, ... ] ) ] ONимÑ_ÑÑолбÑа,имÑ_ÑÑолбÑа[, ...] FROMимÑ_ÑаблиÑÑ
ÐпиÑание
Ðоманда CREATE STATISTICS ÑоздаÑÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ ÑаÑÑиÑенной ÑÑаÑиÑÑики, оÑÑлеживаÑÑий даннÑе опÑеделÑнной ÑаблиÑÑ, ÑÑоÑонней ÑаблиÑÑ Ð¸Ð»Ð¸ маÑеÑиализованного пÑедÑÑавлениÑ. ÐбÑÐµÐºÑ ÑÑаÑиÑÑики бÑÐ´ÐµÑ Ñоздан в ÑекÑÑей базе даннÑÑ
, и его владелÑÑем ÑÑÐ°Ð½ÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, вÑполнÑÑÑий командÑ.
ÐÑли задано Ð¸Ð¼Ñ ÑÑ
ÐµÐ¼Ñ (напÑимеÑ, CREATE STATISTICS myschema.mystat ...), обÑÐµÐºÑ ÑÑаÑиÑÑики ÑоздаÑÑÑÑ Ð² Ñказанной ÑÑ
еме, в пÑоÑивном ÑлÑÑае â в ÑекÑÑей. ÐÐ¼Ñ Ð¾Ð±ÑекÑа ÑÑаÑиÑÑики должно оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¸Ð¼Ñн дÑÑгиÑ
обÑекÑов ÑÑаÑиÑÑики в ÑÑой ÑÑ
еме.
ÐаÑамеÑÑÑ
IF NOT EXISTSÐе ÑÑиÑаÑÑ Ð¾Ñибкой, еÑли обÑÐµÐºÑ ÑÑаÑиÑÑики Ñ Ñаким именем Ñже ÑÑÑеÑÑвÑеÑ. Ð ÑÑом ÑлÑÑае бÑÐ´ÐµÑ Ð²Ñдано замеÑание. ÐамеÑÑÑе, ÑÑо пÑи ÑÑом пÑовеÑÑеÑÑÑ ÑолÑко Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа, а не Ñ Ð°ÑакÑеÑиÑÑики его опÑеделениÑ.
имÑ_ÑÑаÑиÑÑикиÐÐ¼Ñ Ñоздаваемого обÑекÑа ÑÑаÑиÑÑики (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹).
вид_ÑÑаÑиÑÑикиÐид ÑÑаÑиÑÑики, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²ÑÑиÑлÑÑÑÑÑ Ð² ÑÑом обÑекÑе. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ ÑледÑÑÑие видÑ:
ndistinct(подÑÑÑÑ ÑиÑла ÑазлиÑнÑÑ Ð·Ð½Ð°Ñений),dependencies(опÑеделение ÑÑнкÑионалÑнÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑей) иmcv(ÑпиÑки ÑамÑÑ ÑаÑÑÑÑ Ð·Ð½Ð°Ñений). ÐÑли ÑÑо пÑедложение опÑÑено, в обÑÐµÐºÑ ÑÑаÑиÑÑики вклÑÑаÑÑÑÑ Ð²Ñе поддеÑживаемÑе Ð²Ð¸Ð´Ñ ÑÑаÑиÑÑики. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 14.2.2 и РазделÑ 71.2.имÑ_ÑÑолбÑаÐÐ¼Ñ ÑÑолбÑа ÑаблиÑÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð¿Ð¾ÐºÑÑваÑÑÑÑ Ð²ÑÑиÑлÑемой ÑÑаÑиÑÑикой. ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑказаÑÑ Ð¸Ð¼ÐµÐ½Ð° минимÑм двÑÑ ÑÑолбÑов; поÑÑдок ÑÑÐ¸Ñ Ð¸Ð¼Ñн не Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°ÑениÑ.
имÑ_ÑаблиÑÑÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) ÑаблиÑÑ, ÑодеÑжаÑей ÑÑолбÑÑ, по коÑоÑÑм ÑоздаÑÑÑÑ ÑÑаÑиÑÑика; об оÑобенноÑÑÑÑ , ÑвÑзаннÑÑ Ñ Ð½Ð°Ñледованием и ÑекÑиониÑованием, ÑаÑÑказÑваеÑÑÑ Ð² опиÑании ANALYZE.
ÐÑимеÑаниÑ
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ ÑÑаÑиÑÑики, ÑиÑаÑÑий ÑаблиÑÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ бÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем ÑÑой ÑаблиÑÑ. ÐоÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа ÑÑаÑиÑÑики его Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑеделÑÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°Ñей ÑаблиÑÑ.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик не иÑполÑзÑÐµÑ ÑаÑÑиÑеннÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð´Ð»Ñ Ð¾Ñенок избиÑаÑелÑноÑÑи, вÑполненнÑÑ Ð´Ð»Ñ Ñоединений ÑаблиÑ. ÐÑо огÑаниÑение, ÑкоÑее вÑего, бÑÐ´ÐµÑ ÑнÑÑо в одной из ÑледÑÑÑÐ¸Ñ Ð²ÐµÑÑий PostgreSQL.
ÐÑимеÑÑ
СоздайÑе ÑаблиÑÑ 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 избÑÑоÑнÑ, и не оÑибаеÑÑÑ Ñ ÑÑой оÑенкой.
СоздайÑе ÑаблиÑÑ t2 Ñ Ð´Ð²ÑÐ¼Ñ Ð¸Ð´ÐµÐ°Ð»Ñно коÑÑелиÑÑÑÑими ÑÑолбÑами (ÑодеÑжаÑими одинаковÑе даннÑе), а заÑем по ÑÑим ÑÑолбÑам поÑÑÑойÑе ÑÑаÑиÑÑÐ¸ÐºÑ 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;
-- подÑ
одÑÑÐ°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°ÑÐ¸Ñ (вÑ
Ð¾Ð´Ð¸Ñ Ð² MCV)
EXPLAIN ANALYZE SELECT * FROM t2 WHERE (a = 1) AND (b = 1);
-- неподÑ
одÑÑÐ°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°ÑÐ¸Ñ (не вÑ
Ð¾Ð´Ð¸Ñ Ð² MCV)
EXPLAIN ANALYZE SELECT * FROM t2 WHERE (a = 1) AND (b = 2);СпиÑок знаÑений MCV даÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑÐ¸ÐºÑ Ð±Ð¾Ð»ÐµÐµ ÑоÑное пÑедÑÑавление о ÑамÑÑ ÑаÑÑÑÑ Ð·Ð½Ð°ÑениÑÑ Ð² ÑаблиÑе, а Ñакже веÑÑ Ð½ÑÑ Ð³ÑаниÑÑ Ð¸Ð·Ð±Ð¸ÑаÑелÑноÑÑи Ð´Ð»Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñий, оÑÑÑÑÑÑвÑÑÑÐ¸Ñ Ð² ней, благодаÑÑ ÑÐµÐ¼Ñ Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑабоÑаÑÑ Ð±Ð¾Ð»ÐµÐµ ÑоÑнÑе оÑенки в Ð¾Ð±Ð¾Ð¸Ñ ÑлÑÑаÑÑ .
СовмеÑÑимоÑÑÑ
Ðоманда CREATE STATISTICS оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.