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>