天天看點

PostgreSQL 10.0 preview 功能增強 - 自由定義統計資訊次元

postgresql , 10.0 , 統計資訊 , 自由定義 , 自由分組統計資訊

統計資訊是資料庫優化器用來計算sql plan tree中每個node成本的依據,目前postgresql的統計資訊是開源資料庫中最完備的。

包括繼承表、以及全局的統計資訊,每個字段的null值個數或百分比,平均字段寬度,唯一值個數或百分比,高頻詞,高頻詞的百分比,柱狀圖,線性相關性,數組字段的高頻元素,高頻元素的百分比,數組元素的柱狀圖。

實際上統計資訊已經非常完備了,10.0提出了一個更大膽的統計資訊,自定義統計資訊。

比如我們将多個字段作為一個分組,生成分組的統計資訊。有什麼用呢?

例如select count(distinct a,b) from tbl, select count(*),a,b from tbl group by a,b;

以上sql,如果有a,b分組的統計資訊,有多少唯一值,線性相關性如何。優化器就可以評估group by需要多少記憶體,結果集大概多大。

是的,現在postgresql 10.0允許你定義字段分組的統計資訊了。是不是很開森呢?

你甚至可以用它來做多個字段組合的top n的評估呢。

新增的系統表

新增的文法

<a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/create_statistics.sgml;h=60184a347bf72c4e4d075976f2959bd2b9c8e99b;hb=7b504eb282ca2f5104b5c00b4f05a3ef6bb1385b">https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/create_statistics.sgml;h=60184a347bf72c4e4d075976f2959bd2b9c8e99b;hb=7b504eb282ca2f5104b5c00b4f05a3ef6bb1385b</a>

<a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=doc/src/sgml/catalogs.sgml;h=ac39c639edcbbc05b3b18c31cc5ab6b99b93efeb;hp=c531c73aac9f661cad9e3c03e0f16197932edfd4;hb=7b504eb282ca2f5104b5c00b4f05a3ef6bb1385b;hpb=f120b614e070aed39586d1443193738a149a90d4">https://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=doc/src/sgml/catalogs.sgml;h=ac39c639edcbbc05b3b18c31cc5ab6b99b93efeb;hp=c531c73aac9f661cad9e3c03e0f16197932edfd4;hb=7b504eb282ca2f5104b5c00b4f05a3ef6bb1385b;hpb=f120b614e070aed39586d1443193738a149a90d4</a>

這個patch的讨論,詳見郵件組,本文末尾url。

postgresql社群的作風非常嚴謹,一個patch可能在郵件組中讨論幾個月甚至幾年,根據大家的意見反複的修正,patch合并到master已經非常成熟,是以postgresql的穩定性也是遠近聞名的。

<a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=7b504eb282ca2f5104b5c00b4f05a3ef6bb1385b">https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=7b504eb282ca2f5104b5c00b4f05a3ef6bb1385b</a>