PostgreSQL查询代价估算(八)

1.1.1        选择率的计算

PostgreSQL通过(等频)直方图、最频值(MCV)和空值率等统计信息来进行选择率的计算。根据操作符的不同,在pg_operator系统表中登记了每个操作符对应的选择率估算函数。

PostgreSQL对于选择率(Selectivity)的计算,是靠内部函数实现的。PostgreSQL提供最基本的两个函数,用以完成选择率的计算,分别是:

1.         连接选择率,join_selectivity:对连接条件进行选择率的计算;

2.         限制选择率,restriction_selectivity:对限制条件进行选择率的计算。

在这两类选择率基础上,提供了“子句选择率(clause_selectivity)”、“子句列表选择率(clauselist_selectivity)”,对子句表达式进行了包装。

每类选择率,都包括一些操作符,如连接选择率支持连接类型中的等值连接、不等连接、大于连接、小于连接等,这些连接,在PostgreSQL内部,都用函数实现。当需要为某个操作符计算某类操作的选择率的时候,PostgreSQL通过调用函数管理器,执行存储在过程函数系统表(pg_proc.h)中登记的选择率计算函数。

 

选择率实现函数与操作符对应表

功能

接口函数名称

内部函数名称

对应操作符

连接选择率:连接操作符子句的选择率

join_selectivity

eqjoinsel

=

 

neqjoinsel

<> 

 

scalarltjoinsel

 

scalargtjoinsel

 

areajoinsel

区域比较

 

arraycontjoinsel

数组包含

 

positionjoinsel

位置比较

 

contjoinsel

包含比较

 

iclikejoinsel

ILIKE

 

icnlikejoinsel

NOT ILIKE

 

likejoinsel

LIKE

 

Nlikejoinsel

NOT LIKE

 

regexeqjoinsel

正则表达式匹配

 

icregexeqjoinsel

大小写敏感的正则匹配

 

regexnejoinsel

正则不匹配

 

icregexnejoinsel

大小写敏感的正则不匹配

 

tsmatchjoinsel

全文检索

限制选择率:限制操作符子句的选择率

restriction_selectivity

eqsel

=

 

neqsel

<> 

 

scalarltsel

 

scalargtsel

 

areasel

区域比较

 

arraycontsel

数组包含

 

positionsel

位置比较

 

contsel

包含比较

 

iclikesel

ILIKE

 

icnlikesel

NOT ILIKE

 

likesel

LIKE

 

nlikesel

NOT LIKE

 

regexeqsel

正则表达式匹配

 

icregexeqsel

大小写敏感的正则匹配

 

regexnesel

正则不匹配

 

icregexnesel

大小写敏感的正则不匹配

 

tsmatchsel

全文检索

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值