| 
                        副标题[/!--empirenews.page--]
                        技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战
                
英文原文:The Postgres 10 feature you didn't know about: CREATE STATISTICS 
如果你曾使用 Postgres 做过一些性能优化,你或许已经使用过 EXPLAIN 。EXPLAIN 向你展示了 PostgreSQL planner 为提供的语句生成的执行计划。它说明了语句涉及到的表将会使用顺序扫描、索引扫描等方式进行扫描,在使用多表的情况下将会使用连接算法。但是, Postgres 是如何产生这些规划的? 
决定使用哪种规划的一个非常重要的输入是 planner 收集到的数据统计。这些统计的数据能够使 planner 评估执行规划的某一部分会返回多少行,继而影响到使用哪一种规划或连接算法。它们主要是通过运行 ANALYZE 或 VACUUM(和一些 DDL 命令,比如说 CREATE INDEX )来采集或更新的。 
这些统计信息由 planner 存储在 pg_class 和 pg_statistics 中。Pg_class 基本上存储了每个表和索引中的条目总数,以及它们所占用的磁盘块数。Pg_statistic 存储关于每列的统计信息,例如哪些列的 % 值为 nul l,哪些是最常见的值,直方图边界等。你可以查看下面的示例,以了解 Postgres 在下表中为 col1 收集的统计信息类型。下面的查询输出展示了 planner(正确地)预估表中列 col1 中有 1000 个不同的值,并且还对最常见的值、频率等进行了其他预估。 
请注意,我们已经查询了 pg_stats(一个拥有更多可读版本的列统计信息的视图)。 
- CREATE TABLE tbl (                                                                         
 -     col1 int,                                                                              
 -     col2 int                                                                               
 - );                                                                                         
 -  
 - INSERT INTO tbl SELECT i/10000, i/100000                                                   
 - FROM generate_series (1,10000000) s(i);                                                    
 -  
 - ANALYZE tbl;                                      
 -  
 - select * from pg_stats where tablename = 'tbl' and attname = 'col1'; 
 - -[ RECORD 1 ]----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 - schemaname             | public 
 - tablename              | tbl 
 - attname                | col1 
 - inherited              | f 
 - null_frac              | 0 
 - avg_width              | 4 
 - n_distinct             | 1000 
 - most_common_vals       | {318,564,596,...} 
 - most_common_freqs      | {0.00173333,0.0017,0.00166667,0.00156667,...} 
 - histogram_bounds       | {0,8,20,30,39,...} 
 - correlation            | 1 
 - most_common_elems      |  
 - most_common_elem_freqs |  
 - elem_count_histogram   | 
 
  
单列统计数据不足时 
                                                (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |