PostgreSQL(知识片):查询/计算Selectivity(可选性)

一、视图pg_ststs查询可选性

1、当可选性较小时,可以用视图pg_ststs来查询

 表的每一列的MVC(most Common Value)作为一对most_common_vals和most_common_freqs的列存储在pg_ststs视图中。

       (1)most_common_vals:最常见的值。是统计MCVs列表的列;

       (2)most_common_freqs:最常见值的频率。是统计MCV频率的列。

2、举个例子:使用视图pg_ststs来查询Selectivity

       有一个表“countries”,记录了六大洲的信息:Africa、Europe、Asia、“North America”、Oceanic、“South America”,以及每个洲包含的所有国家。

       此时如果使用SQL:SELECT * FROM countries WHERE continent='Asia';那么这个亚洲城市的可选性是多少呢?

计算结果内容如下:

上图第三列就是可选性,即:亚洲名下所有国家的个数占总国家个数的比例。总结:

       与“亚洲”对应的最常见频率值为0.227979。因此,在该估计中使用0.227979作为选择性;

       对于列值可选项很高的情况,就不能使用MCV,则使用目标列的直方图界限值来估计成本。

此时,可以使用视图pg_ststs可以直接对可选性进行查询:

\x
SELECT most_common_vals,most_common_freqs 
FROM pg_stats 
WHERE tablename='countries' 
AND attname='continent';

二、直方图histogram_bounds查询可选性

直方图histogram_bounds是一个值列表,用于将列的值分成大致相等的总体组。

当可选性很高的时候,可以使用此方法来查询。

1、Buckets and histogram_bounds

桶和直方图边界

如上图所示,默认情况下,直方图界限会划分为100个桶, bucket从0开始编号

bucket_0~ bucket_99,0~99就是桶id。每个桶(bucket)存储大约相同数量的元组。

每个桶都有其最小值和最大值(下方对于的数即为其最小值)。直方图界限的值也是相应存储桶的界限。例如,直方图上界的第0个值是1,这意味着它是存储在bucket_0中的元组的最小值;第1个值是100,这是存储在bucket_1中的元组的最小值,依此类推。

2、PG中直方图的计算公式为

Selectivity={ bucket_id + (目标数值-hb[n])/( hb[n+1]-hb[n])} / 桶个数

#bucket_id:where子句中,限定的数值,所在的桶id

#目标数值:where子句中,限定的数值

#hb[n]:where子句中,限定的数值,所在的桶的最小界限值

#hb[n+1]:where子句中,限定的数值,所在桶的下一个桶的最小界限值

#桶个数:一共有多少个桶

SELECT histogram_bounds
FROM pg_stats
WHERE tablename='tbl'
AND attname='data';

3、举个栗子:使用直方图histogram_bounds来查询Selectivity

假设存在图内所示的数据:

使用WHERE data<240来计算选择性(Selectivity)时,公式如下:

bucket_id=2(240在hb(2)里)

目标数值=240

hb[n]=200  (hb(2)桶内的最小值)

hb[n+1]=300   (hb(3)桶内的最小值)

Selectivity={ 2+ (240-200) / (300-200) } / 100 = 0.024

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/911989.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/911989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio 打 APK 包报错 Invalid keystore format 的解决方法

提示&#xff1a;“奔跑吧邓邓子” 的必备核心技能专栏聚焦计算机技术与职场场景&#xff0c;拆解程序员、产品经理等技术从业者的核心能力图谱。内容涵盖编程思维、算法实战、项目管理、技术架构等硬核技能&#xff0c;结合案例解析代码优化、跨团队协作等落地方法论。定期更新…

通义灵码2.5智能体模式实战———集成高德MCP 10分钟生成周边服务地图应用

1 引言 在当今快节奏的开发环境中&#xff0c;智能编程助手正成为开发者生产力的倍增器。通义灵码2.5的智能体模式通过任务分解、多轮对话和上下文感知&#xff0c;将传统代码补全提升为完整的解决方案生成能力。本文将以实战案例展示如何利用通义灵码2.5集成高德地图MCP服务&…

【Linux】使用ip link命令设置bond

目录 1、介绍2、设置步骤【1】创建bonding接口【2】设置bonding模式【3】添加物理网口到bonding接口【4】激活bonding接口 3、解除步骤【1】关闭bond接口【2】接触从属接口【3】删除bond接口 1、介绍 设置bond的方法有很多种&#xff0c;其中通过命令行ip link设置就是其中一种…

Camunda相关表结构和字段备注SQL脚本

Camunda相关表结构和字段备注SQL脚本 引camunda engine表和字段备注 引 Camunda engine服务启动时会自动创建相关的表&#xff0c;沿用了activity的设计&#xff0c;我这里使用的是7.17.0版&#xff0c;自动生成了49张表&#xff0c;但所有的表和字段都没有备注信息&#xff0c…

Qt、C++自定义按钮、组件、事件编程开发练习,万字实战解析!!

x项目地址&#xff1a;https://gitee.com/fan-wenshan/qt_learn_button-andevent_zhengzhuo 项目界面截图&#xff1a; ### 项目介绍&#xff1a;comstomSingal (Qt应用程序) 项目基本信息 - 项目类型 &#xff1a;Qt Widgets应用程序 - 开发环境 &#xff1a;Qt 5.12.12 Min…

商务年度总结汇报PPT模版分享

商务汇报&#xff0c;工作总结&#xff0c;毕业答辩&#xff0c;简历竞聘PPT模版&#xff0c;创意年终汇报PPT模版&#xff0c;IDEAS商务汇报PPT模版&#xff0c;年度总结PPT模版&#xff0c;创意低多边形PPT模版&#xff0c;商务型PPT模版&#xff0c;小清新创意花朵PPT模版&a…

电机设计仿真软件学习DAY3——Maxwell界面功能+3D几何模型绘制

"手把手教你玩转电机&#xff01;每日更新教程&#xff0c;评论区答疑解惑&#xff0c;小白也能变大神&#xff01;" 目录 maxwell基础操作 一.Maxwell基础操作&#xff1a;新建项目 二.maxwell3D界面 三.maxwell3D绘图 3.1绘制圆柱体的方法 3.2绘制正方体的方法…

Apache 支持 HTTPS

证书文件 提取私钥 openssl pkcs12 -in cert.pfx -nocerts -out private.key -nodes 打开命令行&#xff08;CMD 或 PowerShell&#xff09;&#xff0c;进入证书所在目录&#xff0c;输入上面命令&#xff0c;它会提示你输入密码&#xff0c;可以从 password.txt 中复制 提取证…

自然语言处理中的Transformer模型:超越RNN和LSTM

在人工智能的众多领域中,**自然语言处理(Natural Language Processing, NLP)**无疑是最具挑战性也最具前景的方向之一。从机器翻译、文本摘要到情感分析和智能问答,NLP 旨在让机器理解、解释和生成人类语言。长期以来,循环神经网络(Recurrent Neural Network, RNN)及其变…

vue3 new Date() 时间操作

在Vue 3中&#xff0c;你可以使用JavaScript的Date对象来处理日期和时间。如果你想创建一个新的Date对象表示当前时间减去一天&#xff0c;你可以使用以下几种方法之一&#xff1a; 方法1&#xff1a;使用Date对象的setDate()方法 const now new Date(); now.setDate(now.ge…

WebRTC(八):SDP

SDP 概念 SDP 是一种描述多媒体通信会话的文本格式&#xff08;基于 MIME&#xff0c;RFC 4566&#xff09;。本身 不传输数据&#xff0c;仅用于在会话建立阶段传递信息。常与 SIP&#xff08;VoIP&#xff09;、RTSP、WebRTC 等协议配合使用。 用途 描述媒体类型&#xf…

算法竞赛>力扣>周赛 | weekly-contest-455

原文链接&#xff1a;算法竞赛>力扣>周赛 | weekly-contest-455 3591.检查元素频次是否为质数 解题思路 统计每个元素出现的次数&#xff0c;判断各次数是否为质数。由于次数<100&#xff0c;可用试除法判断。 代码实现 bool isPrime(int x) {if (x < 2)retur…

Vue 2快速实现px转vw适配

Vue 2 Vue CLI 项目 px 转 vw 完整使用指南 &#x1f4cb; 概述 本指南详细介绍如何在 Vue 2 Vue CLI 项目中使用 postcss-px-to-viewport-8-plugin 插件&#xff0c;实现自动将 px 单位转换为 vw 单位的响应式设计。 &#x1f680; 第一步&#xff1a;插件安装 1.1 安装…

Android MVVM模式介绍

一、介绍 1.Model(模型) Model代表应用程序的数据和业务逻辑。它负责处理数据的获取、存储和更新&#xff0c;例如从数据库中检索数据或通过网络请求获取数据。Model通常是与UI无关的部分&#xff0c;因此可以独立测试和复用。 2. View&#xff08;视图&#xff09; View是用…

WHAT - React Native 的 Expo Router

文章目录 核心定义核心理念核心功能解析&#xff08;Features&#xff09;1. Native2. Shareable3. Offline-first4. Optimized5. Iteration6. Universal7. Discoverable 总结示例&#xff1a;页面结构如何变成导航&#xff1f; 原文&#xff1a;https://docs.expo.dev/router/…

XML读取和设置例子

在Qt C中&#xff0c;可以使用Qt的 QDomDocument类来读取、更新和保存XML文件。这个类提供了对XML文档的强大操作能力&#xff0c;支持通过DOM&#xff08;文档对象模型&#xff09;对XML进行读取、修改、添加和删除节点等操作。 下面是一个详细的例子&#xff0c;演示如何在Qt…

ubuntu 远程桌面 xrdp + frp

经测试VNC启动桌面&#xff0c;并非常规的桌面。 不如RDP好用。因此不用VNC server 一类。 直接安装xrdp 实现UBUNTU 到UBUNTU 桌面的远程共享。 sudo apt install xrdpsudo systemctl start xrdp查看状态&#xff1a; sudo systemctl status xrdp ● xrdp.service - xrdp d…

el-table表头添加说明

1、el-table-column添加render-header 2、编写render函数 renderTipsHeader(h, { column }, item) {return h(span,[h(span, column.label),h(el-tooltip,{props:{effect:dark,content:item.headertip,placement:top},},[h(i, {class:el-icon-question,style:color:#C0C4CC;mar…

【AI论文】MultiFinBen:一个用于金融大语言模型评估的多语言、多模态且具备难度感知能力的基准测试集

摘要&#xff1a;近期&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的进展加速了金融自然语言处理&#xff08;NLP&#xff09;及其应用的发展&#xff0c;然而现有的基准测试仍局限于单语言和单模态场景&#xff0c;往往过度依赖简单任务&#xff0c;无法反映现实世界…

使用 .NET Core+GcExcel,生成 Excel 文件

引言 在当今数字化办公和数据处理的大环境下&#xff0c;在线生成 Excel 文件成为了许多企业和开发者的需求。.NET Core 作为一个跨平台的开源框架&#xff0c;具有高效、灵活等特点&#xff0c;而 GcExcel 是一款功能强大的 Excel 处理组件。将二者结合&#xff0c;可以方便地…