【数据库】第九章 关系查询处理与优化
第九章 关系查询处理与优化
索引
索引文件是一种辅助存储结构,其存在与否不改变存储表的物理存储结 构;然而其存在,可以明显提高存储表的访问速度。
索引文件组织方式有两种:(相对照的,主文件组织有堆文件、排序文件、散列文件、 聚簇文件等多种方式)
-
排序索引文件(Orderedindices):按索引字段值的某一种顺序组织存储
-
散列索引文件(Hash indices):依据索引字段值使用散列函数分配散列桶的 方式存储
特点
-
在一个表上可以针对不同的属性或属性组合建立不同的索引文件,可建立 多个索引文件。索引字段的值可以是Table中的任何一个属性的值或任何多个 属性值的组合值
-
索引文件比主文件小很多。通过检索一个小的索引文件(可全部装载进内 存),快速定位后,再有针对性的读取非常大的主文件中的有关记录
-
有索引时,更新操作必须同步更新索引文件和主文件。
-
DBMS可以自动维护,table改变,索引也会有相应的改变
-
-
索引技术应用使检索效率大幅度提高,但同时其也增加了存储空间、使维 护负担加重(不仅要维护主文件,而且要维护索引文件)
衡量索引性能好坏:
-
访问时间
-
插入时间
-
删除时间
-
空间负载
-
支持存取的有效性
- 比如:支持的是属性的限定值(是否符合单一值), 还是支持属性的限定范围的值(是否符合一定范围)
相关概念
创建索引
- 对于主文件中每一个记录(形成的每一个索引字段值),都有一个索引项和它 对应,指明该记录所在位置。这样的索引称稠密索引(denseindex)
- 候选键属性的稠密索引
- 先查索引,然后再依据索引读主文件
- 候选键属性的稠密索引(三种情况)
- 候选键属性的稠密索引
- 对于主文件中部分记录(形成的索引字段值),有索引项和它对应,这样的索 引称非稠密索引(undense index)或稀疏索引(sparseindex)
- 稀疏索引如何定位记录
- 定位索引字段值为 K的记录,需要
- 首先找相邻的小于K的最大索引字段值所对应的索引项
- 从该索引项所对应的记录开始顺序进行Table的检索
- 稀疏索引的使用要求—主文件必须是按对应索引字段属性排序存储
- 相比稠密索引:空间占用更少,维护任务更轻,但速度更慢
- 平衡:索引项不指向记录指针,而是指向记录所在存储块的指针,即每一 存储块有一个索引项,而不是每条记录有一索引项----主索引
- 定位索引字段值为 K的记录,需要
- 稀疏索引如何定位记录
比较
- 一个主文件仅可以有一个主索引,但可以有多个辅助索引
- 主索引通常建立于主码/排序码上面;辅助索引建立于其他属性上面
- 可以利用主索引重新组织主文件数据,但辅助索引不能改变主文件数据
- 主索引是稀疏索引,辅助索引是稠密索引
聚簇索引与非聚簇索引
-
聚簇索引—是指索引中邻近的记录在主文件中也是临近存储的;
-
非聚簇索引—是指索引中邻近的记录在主文件中不一定是邻近存储的
特点
- 如果主文件的某一排序字段不是主码,则该字段上每个记录取值便不唯 一,此时该字段被称为聚簇字段;聚簇索引通常是定义在聚簇字段上。
- 聚簇索引通常是对聚簇字段上的每一个不同值有一个索引项(索引项的总数和 主文件中聚簇字段上不同值的数目相同),索引字段即是聚簇字段的不同值,由于有相同聚簇字 段值的记录可能存储于若干块中,则索引项的指针指向其中的第一个块。
- 一个主文件只能有一个聚簇索引文件,但可以有多个非聚簇索引文件 主索引通常是聚簇索引(但其索引项总数不一定和主文件中聚簇字段上不同值的数目相 同,其和主文件存储块数目相同);辅助索引通常是非聚簇索引。
- 主索引/聚簇索引是能够决定记录存储位置的索引;而非聚簇索引则只能用 于查询,指出已存储记录的位置
其他索引类型
- 倒排索引
数据库查询实现算法
一趟扫描算法
数据库查询优化技术
思路
- (1)尽可能地早做选择和投影:可使中间 结果变小,节省几个数量级的执行时间。
- (2)把选择与投影串接起来:一元运算序 列可一起执行,只需对整个关系扫描一遍。
- (3)把投影与其前或后的二元运算结合 起来:在第一次用关系时去掉一些无关属性, 可以避免多次扫描整个关系。
- (4)把某些选择与其前的笛卡尔积合并 成一个连接:当R×S前有选择运算且其中有 条件是R、S属性间比较的运算时,可将其转化 为连接运算可节省时间。
- (5)执行连接运算前对关系做适当预处 理:文件排序、建立临时索引等,可使两关系 公共值高效联接。
- (6)找出表达式里的公共子表达式:若 公共子表达式结果不大,则预先计算,以后可读 入此结果,节时多,尤当视图情况下有用。
关系代数操作交换的等价性
关系代数: 并,差,积,选择,投影
等价:
关系交换定理
- 连接与连接,积与积的交换律
通常,我们选择结果集合小的表达式,先装入内存
- 连接与连接、积和积的结合律
通常,我们选择结果集合小的表达式,先装入内存
- 投影串接律
- 选择串接律
- 选择和投影交换律
-
选择和积的交换律
-
投影和积的交换律
- 选择和并的交换律
- 选择和差的交换律
- 投影和并的交换律
查询优化算法及示例
物理层优化
代价估算
相关文章:

【数据库】第九章 关系查询处理与优化
第九章 关系查询处理与优化 索引 索引文件是一种辅助存储结构,其存在与否不改变存储表的物理存储结 构;然而其存在,可以明显提高存储表的访问速度。 索引文件组织方式有两种:(相对照的,主文件组织有堆文件、排序文件、…...

大学物理期末大题专题训练总结-磁学大题
(事先声明指的是简单的那个磁学大题,另外一类涉及储存的磁能、磁感应强度分布下次说)求个磁通量,求个感应电动势,求个安培力大小......这个感觉是不是像你梦回高中?当然,这一块大题跟高中磁学部…...

聚类算法(上):8个常见的无监督聚类方法介绍和比较
无监督聚类方法的评价指标必须依赖于数据和聚类结果的内在属性,例如聚类的紧凑性和分离性,与外部知识的一致性,以及同一算法不同运行结果的稳定性。 本文将全面概述Scikit-Learn库中用于的聚类技术以及各种评估方法。 本文将分为2个部分&…...
华为OD机试真题Python实现【找到它】真题+解题思路+代码(20222023)
找到它 题目 找到它是个小游戏,你需要在一个矩阵中找到给定的单词 假设给定单词HELLOWORLD,在矩阵中只要能找HELLOWORLD就算通过 注意区分英文字母大小写,并且你只能上下左右行走 不能走回头路 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Python)真题目…...
English Learning - L2 语音作业打卡 Day4 2023.2.24 周五
English Learning - L2 语音作业打卡 Day4 2023.2.24 周五💌 发音小贴士:💌 当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音 [u:]&#x…...

C#:Krypton控件使用方法详解(第九讲) ——kryptonRadioButton
今天介绍的Krypton控件中的kryptonRadioButton,这是一个单选按钮控件。下面开始介绍这个控件的属性:首先介绍的是外观属性,如下图所示:Cheacked属性:表示设置kryptonRadioButton控件的初始选中状态是什么样的ÿ…...
消失的数字(每日一题)
目录 一、题目描述 二、题目分析 2.1 方法一 2.1.1 思路 2.1.2 代码 2.2 方法二 2.2.1 思路 2.2.2 代码 2.3 方法三 2.3.1 思路 2.3.2 代码 三、完整代码 一、题目描述 oj链接:https://leetcode.cn/problems/missing-number-lcci 数组nums包含从0到n的…...
TypeScript算法基础——TS字符串的常用操作总结:substring、indexOf、slice、replace等
字符串的操作是算法题当中经常碰见的一类题目,主要考察对string类型的处理和运用。 在处理字符串的时候,我们经常会碰到求字符串长度、匹配子字符串、替换字符串内容、连接字符串、提取字符串字符等操作,那么调用一些简单好用的api可以让工作…...
Leetcode100-两数之和
参见官方题解 一、学到的知识 正面寻找两个数之和相加等于某个数,如 ab c,不如反过来寻找 a c - b 正面寻找需要两层 for 循环,把每个数都进行遍历,所以时间复杂度较高 反过来则可以通过维护一个 a 的集合,每次通过…...
4565: 删除中间的*
描述规定输入的字符串中只包含字母和*号,除了字符串前导和尾部的*号之外,将串中其他*号全部删除输入输入数据包括一串字符串,只包含字母和*,总长度不超过80。输出输出删除中间*后的字符串。样例输入*******A*BC*DEF*G****样例输出*******ABCD…...
VUE组件示例说明
<!-- * Author: xxx.xx * Date: 2021-07-20 14:33:41 * LastEditors: xxx.xx * LastEditTime: 2021-07-20 18:22:37 * PageTitle: 上拉加载组件 * Description: 描述... * FilePath: /wxapp-view/components/loadmore.vue --> <template><view class"c-mor…...

Widget中的State-学习笔记
Widget 有 StatelessWidget 和 StatefulWidget 两种类型。StatefulWidget 应对有交互、需要动态变化视觉效果的场景,而 StatelessWidget 则用于处理静态的、无状态的视图展示。StatefulWidget 的场景已经完全覆盖了 StatelessWidget,因此我们在构建界面时…...
股市实战技巧(知行合一)
投资策略 长线:优质核心股票大仓位核心标的票,小仓位短线投资投机小储蓄可加大投机仓位价值投资也要去做仓位控制 行情好,总体大仓位,行情小,小仓位个股根据走势调整个股仓位(布林线的20%原则)…...

k8s-资源限制-探针检查
文章目录一、资源限制1、资源限制的使用2、reuqest资源(请求)和limit资源(约束)3、Pod和容器的资源请求和限制4、官方文档示例5、资源限制实操5.1 编写yaml资源配置清单5.2 释放内存(node节点,以node01为例…...

一文让你彻底了解Linux内核文件系统
一,文件系统特点 文件系统要有严格的组织形式,使得文件能够以块为单位进行存储。文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置。如果文件系统中有的文件是热点文件,近期经常被读取和写入…...

解决前端组件下拉框选择功能失效问题
问题: 页面下拉框选择功能失效 现象: 在下拉框有默认值的情况下,点击下拉框的其他值,发现并没有切换到其他值 但是在下拉框没默认值的情况下,功能就正常 原因 select 已经绑定选项(有默认值) 在…...

Linux_vim编辑器入门级详细教程
前言(1)vim编辑器其实本质上就是对文本进行编辑,比如在.c文件中改写程序,在.txt文件写笔记什么的。一般来说,我们可以在windows上对文本进行编译,然后上传给Linux。但是有时候我们可能只是对文本进行简单的…...
TCP 的演化史-TCP 是一个过渡
TCP 诞生于 1970 年代早期,彼时没有分组交换网的大规模应用,彼时绝大多数通信都在使用电话,电报,电挂等电路交换技术。 诞生在这种环境下的技术不可能脱离时代的影响,如果一个孩子出生在一个父母关系冷漠的家庭&#x…...
Flask
Flask第三方组件非常全,适合小型 API服务类项目,但第三方组件运行稳定性相对Django差。 基础知识 Flask安装 pip install flask2.0.3Flask库文件 Jinjia2:模板渲染库Markupsafe:返回安全标签 只要Flask返回模板或者标签时都会…...
SAP系统与MES系统的数据协同技术方案
1.MES介绍 本文中提到的MES系统是在西门子公司的SIMATIC IT平台上开发完成。所有的应用子系统进行统一分析、统一设计、统一开发,利用统一的开发平台和数据库系统,保证了管理系统的集成性、高效性。 2.数据协同接口包含的…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...