前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >解密openGauss数据库中的函数依赖关系

解密openGauss数据库中的函数依赖关系

作者头像
叶秋学长
发布于 2023-02-01 03:00:22
发布于 2023-02-01 03:00:22
1.2K0
举报
文章被收录于专栏:全栈学习专栏全栈学习专栏

生活中总是存在着错综复杂的联系,例如喜欢打篮球的人,身高普遍比较高;喜欢穿艳丽色衣服的人,性格会普遍比较开朗;在超市买炸鸡的人,会大概率买啤酒。而反过来,这种联系并不一定成立。

数据库领域,表中的不同属性就像生活中不同的事物,也会存在着各种类似的关联关系。如何利用这种关联关系来提升数据库查询性能?这篇文章可以解密openGauss的一种应用方案,该特性可通过GUC参数enable_functional_dependency进行控制。

1、函数依赖的用途

函数依赖特性就是用一个介于0~1的值来量化这种关联关系的强弱程度,这个数值又被称为函数依赖度,其中0表示没有关联,1表示完全关联。函数依赖,是多列统计信息的一种,可以描述两个属性之间的关联关系的强弱,也可以用于描述多个属性与另一个属性的关联关系的强弱,其主要用途是提高选择率计算的准确性。其中选择率的定义为:

选择率是对SQL查询结果规模的预期,取值0~1。如果选择率比较大,即接近于1,那么查询优化器会倾向于使用顺序扫描,如果选择率比较小,即接近于0,查询优化器会倾向于使用索引扫描,如果介于两者之间,查询优化器倾向于使用位图扫描。所以选择率能否估算准确,会直接影响到执行计划的选择,进而影响到数据库的查询效率。函数依赖特性的加入,能一定程度上提高选择率估算的准确性。

在引用函数依赖特性之前,数据库会使用条件独立假设的方法来估算选择率。举一个生活中的例子,在一个班级中,男女生的比例是1:1,喜欢篮球的人数占比为20%,身高175cm以上的人数占比为50%。我们可以说喜欢篮球且身高在175cm以上的男生的占比为50% * 20% * 50% = 5%吗?显然这个计算结果会比实际结果低,因为这几个属性之间有关联关系,喜欢篮球的人普遍身高偏高,喜欢篮球的人中男生占多数,男生的身高较女生普遍偏高。

2、理论推导

下面我们从理论上来对比,条件独立假设和函数依赖在计算选择率时的差异。假设一个表 t(a int, b int, c int),A是只与属性{a}相关的等式约束条件,B是只与属性{b}相关的等式约束条件。在条件独立假设下,同时满足约束条件A和约束条件B的选择率的计算公式为:

s(A,B) = s(A)* s(B)

这会导致选择率一定程度的低估,因为约束条件A和约束条件B会存在或强或弱关联,而这里并没有考虑在内。引入函数依赖特性,并应用函数依赖关系a=>b:fa→b来计算选择率s(A, B)的理论公式为:

s(A,B) = fa→b * s(A) + (1 — fa→b) * s(A) * s(B)

其中,fa→b为一个实数,取值0~1。类似地,对于含有三个属性的函数依赖关系"a , b=> c:fa,b—>c ",计算选择率s(A, B, C)的理论公式为:

s(A,B,C)= fa,b→c * s(A,B) + (1 — fa,b→c) * s(A,B) * s(C)

但是在实际应用中,考虑到最终的选择率不能大于任何一个属性列的选择率,需要对上述的理论公式做一个轻微变形,用min(s(A), s(B))来代替第一项的s(A),min(s(A, B), s(C))来代替第一项的s(A, B)。这种变形会对计算不满足函数依赖的数值的选择率,产生一定的修正作用。

s(A,B) = fa→b * min(s(A), s(B)) + (1 — fa→b) * s(A) * s(B)

s(A,B,C)= fa,b→c * min(s(A, B), s(C)) + (1 — fa,b→c) * s(A,B) * s(C)

3、应用示例

上面我们已经对openGauss数据库中的函数依赖关系进行了理论上的介绍,下面我们看看在具体实践中,应该如何操作。下面的几个例子,可以很好地展现openGauss数据库的该特性。

--优化SQL查询的行数估计模型前

通过在openGauss中使用函数依赖关系的数据库优化技术,我们可以看到数据库的查询优化性能得到了显著的提升。如果大家对该特性感兴趣,欢迎通过点击下方“阅读原文”下载最新的openGauss数据库进行体验!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶秋学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(4)
优化器会根据生成的逻辑执行计划枚举出候选的执行路径,要确保执行的高效,需要在这些路径中选择开销最小、执行效率最高的路径。那么如何评估这些计划路径的执行开销就变得非常关键。代价估算就是来完成这项任务的,基于收集的数据统计信息,对不同的计划路径建立代价估算模型,评估给出代价,为路径搜索提供输入。
数据和云
2021/11/29
6890
【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(4)
【连载】openGauss SQL 引擎|查询优化
上一篇 openGauss SQL 引擎 中我们介绍了SQL引擎概览、SQL解析以及查询优化器的优势和优化技术的分类,本文将详细介绍查询优化的相关内容。
JiekeXu之路
2023/02/24
9710
【连载】openGauss SQL 引擎|查询优化
函数依赖总结
关系模式的外延和内涵 一个关系模式包含外延和内涵。 外延就是通常所说的关系、表或当前值。由于用户经常进行增删改查,所以外延是与时间有关的。 内涵是与时间独立的,是对数据的定义以及数据完整性约束的定义。对数据的定义包括关系、属性、域的定义和说明。 对数据完整性约束主要包括两个方面: 静态约束:涉及数据之间的联系(函数依赖)、主键和值域的设计。 动态约束:定义各种操作(增删改)对关系值的影响。 一般就把内涵称为关系模式。 关系模式的冗余和异常 数据冗余是指同一个数据在系统中多次出现。 由于数据的冗余,在对数据进
SuperHeroes
2018/05/31
8430
考研数据库系统概论题目整理总结_数据库系统概论pdf
说复试题目过于牵强,只是自己整理的一些知识点而已,为了便于理解和背诵,有些部分定义和说明尽量简明扼要,如有错误请多多指教!(不可转载)
全栈程序员站长
2022/09/27
7980
考研数据库系统概论题目整理总结_数据库系统概论pdf
常见数据库简答题_数据库基础知识试题
第一章 1.简述数据、数据库、数据库管理系统、数据库系统的概念(期末题库、课后题、大纲要求、试题三)
全栈程序员站长
2022/10/02
2.5K0
关系数据理论-数据库习题
设有关系W(工号,姓名,工种,定额),将其规范化到第三范式正确的答案是( ) 。 A. W1(工号,姓名) ,W2(工种,定额) B. W1(工号,工种,定额) , W2(工号,姓名) C. W1(工号,姓名,工种) ,w2(工种,定额) D. 以上都不对 正确答案: C
全栈程序员站长
2022/11/03
5610
系统架构设计师|数据库基础-003
从前几篇的反应来看,反响还是不错的,本篇开始梳理数据库(系统架构设计师)相关的知识。如果出入或偏颇,还望指出。
六月暴雪飞梨花
2024/09/08
1330
系统架构设计师|数据库基础-003
数据库原理笔记「建议收藏」
数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合。
全栈程序员站长
2022/09/20
1.9K0
数据库关系模式的函数依赖习题讲解
第一题会讲解的非常详细,请一定认真看,后面 3 道题作为练习题,自己先做再参考答案。
wsuo
2020/07/31
3.7K2
数据库关系模式的函数依赖习题讲解
数据库原理~~~
第二步:被除关系R中与S中不相同的属性列是X ,关系R在属性(X)上做取消重复值的投影为{X1,X2}; 第三步:求关系R中X属性对应的像集Y 根据关系R的记录,可以得到与X1值有关的记录,如图3所示;与X2有关的记录,如图4所示
20岁爱吃必胜客
2022/11/12
5810
数据库原理~~~
『数据库』数据库的查询可不是只知道Select就可以的--关系数据库系统的查询处理
一、关系数据库系统的查询处理 1.查询处理步骤 关系数据库管理系统查询处理阶段 : 1)查询分析 :对查询语句进行扫描、词法分 析和语法分析
风骨散人Chiam
2020/10/28
1.3K0
关系数据库理论(一)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154633.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
6560
数据库设计中关系规范化理论总结怎么写_数据库规范化理论是什么
摘要:数据库是一门对数据进行有效管理的技术,它研究信息资源如何被安全地储存和如何被高效地利用,它是现代计算机科学的一个重要分支。其中关系数据库是目前被应用最广泛的数据库类型,它看起来类似于一张二维表,通过应用数学的方法来处理数据库中的数据。在关系数据库的设计过程中,最重要的莫过于对数据库的逻辑设计,即针对一个具体的问题,我们应该如何去构造一个适合它的数据库模式。经过科学家的讨论研究,最终形成我们今天所看到的关系数据库的规范化理论。本文通过例举具体事例来探讨关系规范化理论在数据库逻辑设计中的形成和方法。 关键词:数据库;关系规范化理论;范式;函数依赖;属性
全栈程序员站长
2022/11/03
8380
【数据库】入门基础概念 第三周作业 记录 +答案+个人分析
1、外模式 对应数据库的升级、外模式包括(子模式 用户模式) 用来描述用户看到或者使用那部分的数据的逻辑结构,用户根据外模式用户数据操作语句或者程序去操作数据库中的数据,外模式的主要特点用来描述组成用户视图各个记录的组成、相互联系、数据的完整性和安全性、数据项的特征等。 2、概念模式 对应数据库的概念模式,概念模式(概念、逻辑模式)用以描述整个数据库中的逻辑结构、用来描叙现实生活中的实体,以及它们之间的关系、从而定义记录数据项的完整性约束条件以及记录之间的联系是数据项的框架 概念模式是数据库中全体数据的逻辑结构和特征的描叙是所有用户数据的公共数据视图。 3、内模式 内模式对应物理级数据库,内模式是所有模式中的最低层的表示,不同于物理层,假设外存是一个无限性的地址空间,内模式是存储记录的类型,存储域以及表示以及存储记录的物理顺序,指示元索引,和存储路径的等数据的存储组织从而形成一个完整的系统。
韩旭051
2020/06/23
1.5K0
数据库全册选择题
DBS包括DB和DBMS DBMS包括DB和DBS DB包括DBS和DBMS DBS就是DB,也就是DBMS 正确答案: A
Twcat_tree
2022/11/30
1.2K0
数据库原理
三级模式:模式(逻辑),外模式(子模式,局部逻辑),内模式(存储模式,物理结构唯一)
esse LL
2024/04/23
1650
数据库系统:第六章 关系数据理论
数据库有“三个从无到有”,其中第一个就是数据库模式的从无到有,针对一个具体问题,如何构造一个适合的数据库模式是建立数据库系统很基本的问题,这是数据库的设计问题,确切的说是关系数据库逻辑设计问题,我们有一个有利工具:关系数据库的规范化理论。
Here_SDUT
2022/08/09
1.4K0
数据库系统:第六章 关系数据理论
数据库范式
关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍。 在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手。 第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值 都是不可再分的最小数据单位,则称R是第一范式的关系。例:如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码) 规范成为1NF有三种方法: 一是重复存储职工号和
用户1075292
2018/01/23
6840
数据库复习题 考试题库(填空题)
1.数据库系统一般由(数据库)、应用系统、(数据库管理系统)、(数据库管理员)和用户构成。
Meng小羽
2019/12/23
6.4K0
关系数据库设计理论中,起核心作用的是_关系数据库设计理论主要包括
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/03
5980
关系数据库设计理论中,起核心作用的是_关系数据库设计理论主要包括
推荐阅读
相关推荐
【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(4)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档