网站建设实训报告命名规范,房产信息查询,wordpress 文字框,时事新闻热点一、视图pg_ststs查询可选性
1、当可选性较小时#xff0c;可以用视图pg_ststs来查询 表的每一列的MVC#xff08;most Common Value#xff09;作为一对most_common_vals和most_common_freqs的列存储在pg_ststs视图中。 #xff08;1#xff09;most_common_vals#x…一、视图pg_ststs查询可选性
1、当可选性较小时可以用视图pg_ststs来查询 表的每一列的MVCmost Common Value作为一对most_common_vals和most_common_freqs的列存储在pg_ststs视图中。 1most_common_vals最常见的值。是统计MCVs列表的列 2most_common_freqs最常见值的频率。是统计MCV频率的列。
2、举个例子使用视图pg_ststs来查询Selectivity 有一个表“countries”记录了六大洲的信息Africa、Europe、Asia、“North America”、Oceanic、“South America”以及每个洲包含的所有国家。 此时如果使用SQLSELECT * FROM countries WHERE continentAsia;那么这个亚洲城市的可选性是多少呢
计算结果内容如下 上图第三列就是可选性即亚洲名下所有国家的个数占总国家个数的比例。总结 与“亚洲”对应的最常见频率值为0.227979。因此在该估计中使用0.227979作为选择性 对于列值可选项很高的情况就不能使用MCV则使用目标列的直方图界限值来估计成本。
此时可以使用视图pg_ststs可以直接对可选性进行查询
\x
SELECT most_common_vals,most_common_freqs
FROM pg_stats
WHERE tablenamecountries
AND attnamecontinent;二、直方图histogram_bounds查询可选性
直方图histogram_bounds是一个值列表用于将列的值分成大致相等的总体组。
当可选性很高的时候可以使用此方法来查询。
1、Buckets and histogram_bounds
桶和直方图边界 如上图所示默认情况下直方图界限会划分为100个桶, bucket从0开始编号
bucket_0~ bucket_990~99就是桶id。每个桶bucket存储大约相同数量的元组。
每个桶都有其最小值和最大值下方对于的数即为其最小值。直方图界限的值也是相应存储桶的界限。例如直方图上界的第0个值是1,这意味着它是存储在bucket_0中的元组的最小值第1个值是100这是存储在bucket_1中的元组的最小值依此类推。
2、PG中直方图的计算公式为 Selectivity{ bucket_id (目标数值-hb[n])/( hb[n1]-hb[n])} / 桶个数 #bucket_idwhere子句中限定的数值所在的桶id #目标数值where子句中限定的数值 #hb[n]where子句中限定的数值所在的桶的最小界限值 #hb[n1]where子句中限定的数值所在桶的下一个桶的最小界限值 #桶个数一共有多少个桶 SELECT histogram_bounds
FROM pg_stats
WHERE tablenametbl
AND attnamedata;3、举个栗子使用直方图histogram_bounds来查询Selectivity
假设存在图内所示的数据 使用WHERE data240来计算选择性Selectivity时公式如下 bucket_id2240在hb2里 目标数值240 hb[n]200 hb(2)桶内的最小值 hb[n1]300 hb(3)桶内的最小值 Selectivity{ 2 (240-200) / (300-200) } / 100 0.024