概念杂记--到底啥是啥?(数据库篇)
文章目录
- 1.聚集索引(clustered index)
- 2.非聚集索引(Non-clustered index)
- 3.聚集索引和非聚集索引区别?
- 4.覆盖索引(covering index)
- 5、复合索引 (Composite Index)
- 6.索引最左匹配原则
1.聚集索引(clustered index)
聚集索引(Clustered Index)是数据库中一种常见的索引类型,它定义了表中数据的物理存储顺序。在聚集索引中,数据行按照索引键的顺序进行排序,并且表中的数据实际上是按照聚集索引的顺序存储的。
以下是聚集索引的一些特点和定义要点:
- 1、数据行的物理存储顺序:聚集索引决定了表中数据行的物理存储顺序,这意味着具有相邻索引键的行在物理上也是相邻存储的。
- 2、主键索引通常是聚集索引:在大多数关系型数据库管理系统(RDBMS)中,默认的主键索引就是聚集索引。如果表没有显式定义主键,则某些数据库系统可能会选择一个唯一索引作为聚集索引。
- 3、数据访问的效率:由于聚集索引中的数据行按照索引键的顺序存储,因此对于使用索引键进行查找或范围查询的操作,聚集索引可以提供较高的查询效率。
- 4、表只能有一个聚集索引:每个表只能有一个聚集索引,这是因为数据行只能按照一种方式进行排序和存储)
2.非聚集索引(Non-clustered index)
非聚集索引(Non-clustered Index)是数据库中另一种常见的索引类型,与聚集索引相对。与聚集索引不同,非聚集索引的索引键值不决定数据行的物理存储顺序。相反,它们创建一个独立的数据结构,其中包含索引键和指向实际数据行的指针。
以下是非聚集索引的一些定义要点:
- 1、数据行的物理存储顺序:与聚集索引不同,非聚集索引并不决定数据行的物理存储顺序。它们仅提供了一个独立的数据结构,用于快速查找索引键。
- 2、索引键和指针:非聚集索引由索引键和指向实际数据行的指针组成。索引键是用于快速定位和排序的值,而指针指向数据行的物理位置。
- 3、 多个非聚集索引:对于一个表,可以创建多个非聚集索引,每个非聚集索引都可以基于不同的列或列组合。
- 4、查询效率:非聚集索引可以提供快速的查询效率,特别是当查询需要检索特定列或进行范围查询时,非聚集索引可以减少数据访问的成本。
- 5、更新和维护开销:与聚集索引相比,非聚集索引在数据更新和插入操作时的开销较小。然而,对于频繁的更新操作,维护多个非聚集索引可能会导致一定的性能影响。
3.聚集索引和非聚集索引区别?
非聚集索引和聚集索引在数据库中具有以下区别:
- 1、物理排序顺序:聚集索引决定了表中数据行的物理存储顺序,而非聚集索引没有这个作用。聚集索引的数据行按照索引键的顺序进行排序,并且表中的数据实际上是按照聚集索引的顺序存储的。非聚集索引则是创建一个独立的数据结构,其中包含索引键和指向实际数据行的指针。
- 2、数据访问方式:使用聚集索引进行查询时,数据库可以直接按照索引的顺序快速访问数据行。而非聚集索引则需要通过索引键值查找到对应的指针,然后再根据指针找到实际的数据行。因此,聚集索引通常可以提供更快的数据访问速度。
- 3、存储方式:聚集索引决定了数据行的物理存储方式,因此一个表只能有一个聚集索引。而非聚集索引则是独立于数据行的存储结构,一个表可以有多个非聚集索引。
- 4、更新开销:对于聚集索引,当数据行发生更新操作时,可能需要重新排序和移动数据行的位置,这可能导致额外的开销。而非聚集索引的更新开销相对较小,因为它们不影响实际数据行的物理存储顺序。
- 5、主键索引:在大多数关系型数据库管理系统(RDBMS)中,默认的主键索引通常是聚集索引。如果表没有显式定义主键,则某些数据库系统可能会选择一个唯一索引作为聚集索引。
综上所述,非聚集索引和聚集索引在数据的物理存储方式、数据访问方式和更新开销等方面存在明显的区别。在设计和选择索引时,需要考虑具体的查询需求、数据访问模式和更新频率,以确定使用哪种索引类型或它们的组合来优化数据库的性能。
4.覆盖索引(covering index)
覆盖索引(Covering Index)是一种特殊的索引,它包含了查询涉及的所有列,而不仅仅是索引列本身。通过创建覆盖索引,查询可以直接从索引中获取所需的数据,而无需回到原始数据行,从而提高查询性能。
以下是覆盖索引的一些要点:
- 1、包含索引列以及查询涉及的其他列:覆盖索引包含了查询所需的所有列,包括索引列以及查询涉及的其他列。这样,查询可以直接从索引中获取所需的数据,而无需访问原始数据行。
- 2、减少访问磁盘的次数:通过使用覆盖索引,数据库可以减少访问磁盘的次数。因为覆盖索引包含了查询所需的所有列,所以数据库可以直接从索引中读取数据,而不需要额外的磁盘访问来获取缺失的列。
- 3、提高查询性能:由于覆盖索引可以减少磁盘访问次数,从而提高查询的性能。这对于复杂的查询或需要访问大量数据的查询尤为重要。
- 4、空间和维护开销:覆盖索引需要占用更多的存储空间,因为它包含了更多的列。此外,由于覆盖索引需要维护额外的列,因此在数据更新时可能会增加一些维护开销。
- 5、选择适当的列和查询:为了获得最大的性能收益,选择适当的列和查询来创建覆盖索引非常重要。覆盖索引在某些查询模式和特定的列选择上可能更加有效。
需要注意的是,并非所有的查询都适合使用覆盖索引。在设计和创建覆盖索引时,需要综合考虑查询的性能需求、查询模式、数据访问模式以及索引的空间和维护开销。
简单来说就是索引中包含索要需要查询的内容,这样可以直接从索引中获取数据,而不需要回表查询。但是这样势必会造成额外的空间和维护开销。
5、复合索引 (Composite Index)
复合索引(Composite Index)是由多个列组成的索引,它可以涵盖多个列的查询条件。复合索引允许在一个索引中定义多个列的组合,以便在查询中同时利用这些列进行索引扫描和匹配。
复合索引的特点和使用包括以下几个方面:
- 1、列的顺序:复合索引中的列可以按照特定的顺序进行定义。通常,将最常用于查询条件的列放在索引的最左侧,以便最大程度地利用索引进行查询优化。查询中涉及的列可以是复合索引的一部分,而不需要涉及所有列。
- 2、查询优化:复合索引可以提供更精确的查询性能,特别是当查询需要根据多个列进行过滤或排序时。通过使用复合索引,数据库引擎可以更准确地定位满足查询条件的数据行,减少不必要的扫描和比较操作,从而提高查询效率。
- 3、索引覆盖:当复合索引涵盖了查询所需的所有列时,称之为索引覆盖(Index Covering)。索引覆盖可以进一步提高查询性能,因为查询可以完全从索引中获取所需的数据,无需访问原始数据行。
- 4、设计考虑:在设计复合索引时,需要综合考虑查询模式、数据访问模式和列的选择。选择适当的列和顺序可以提高查询性能,但过多或不必要的列可能会增加索引的大小和维护成本。
6.索引最左匹配原则
索引最左匹配原则(Index Leftmost Prefix Rule)是指在使用复合索引(Composite Index)时,索引的左侧列将优先用于查询条件的匹配。当查询中使用了复合索引的一部分列作为查询条件时,数据库引擎可以利用这个索引来加速查询,但只能从最左侧的列开始进行匹配。
以下是索引最左匹配原则的一些要点:
- 1、复合索引:复合索引是由多个列组成的索引,它可以涵盖多个列的查询条件。例如,一个复合索引可以是 (col1, col2, col3)。
- 2、最左匹配:索引最左匹配原则意味着在查询时,只有从索引的最左侧列开始连续匹配,才能利用复合索引进行加速。换句话说,查询条件中的列必须是复合索引中最左侧的列,才能使查询受益于索引。
- 3、匹配顺序:如果查询条件中同时使用了复合索引的多个列,但不是从最左侧列开始,那么索引可能无法有效利用,查询性能可能会下降。因此,在设计查询条件时,应优先考虑使用最左侧列。
- 4、索引覆盖:当查询中的列与复合索引的所有列完全匹配时,称之为索引覆盖(Index Covering)。索引覆盖可以进一步提高查询性能,因为查询可以完全从索引中获取所需的数据,无需访问原始数据行。
需要注意的是,索引最左匹配原则只适用于复合索引,对于单列索引没有影响。在设计复合索引时,应根据查询模式、数据访问模式和列的选择来决定索引的顺序,以最大程度地利用索引并提高查询性能。
相关文章:
概念杂记--到底啥是啥?(数据库篇)
文章目录 1.聚集索引(clustered index)2.非聚集索引(Non-clustered index)3.聚集索引和非聚集索引区别?4.覆盖索引(covering index)5、复合索引 (Composite Index)6.索引…...

Ubuntu20.4 Mono C# gtk 编程习练笔记(四)
连续实时绘图 图看上去不是很清晰,KAZAM录屏AVI尺寸80MB, 转换成gif后10MB, 按CSDN对GIF要求,把它剪裁缩小压缩成了上面的GIF,图像质量大不如原屏AVI,但应该能说明原意:随机数据随时间绘制在 gtk 的 drawin…...
1 月 26日算法练习
文章目录 九宫幻方穿越雷区走迷宫 九宫幻方 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个33的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称…...

今日AI大热潮,明日智能风向标
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

03 SB实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)
1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址:portal/findAllTypes 请求方式:get 请求参数:无 响应数据: 成功 {"code":"200","mes…...
Abaqus许可分析工具
在当今的知识产权保护和许可管理领域,一款高效、精准的许可分析工具对于企业来说至关重要。Abaqus许可分析工具凭借其强大的功能和卓越的性能,成为了企业优化知识产权许可管理的得力助手。 一、Abaqus许可分析工具的核心优势 1.全面性:Abaqus…...
【开发工具】从eclipse到idea的过度
背景 随着eclipse相比以前性能慢了不少,idea在开发工具领域越战越猛,市场份额也逐年增加,其体验得了软件工程师的热爱。 概要 本文只是做了一个简要的记录,简单描述下本人从eclipse到idea的过度的心态。 正文 在大厂都会研发自…...

【QT+QGIS跨平台编译】之十一:【libzip+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
文章目录 一、libzip介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libzip介绍 libzip是一个开源C库,用于读取,创建和修改zip文件。 libzip可以从数据缓冲区,文件或直接从其他zip归档文件直接复制的压缩数据中添加文件。在不关闭存档的情况下所做的更改可以还原…...

openlayers+vue实现缓冲区
文章目录 前言一、准备二、初始化地图1、创建一个地图容器2、引入必须的类库3、地图初始化4、给地图增加底图 三、创建缓冲区1、引入需要的工具类库2、绘制方法 四、完整代码总结 前言 缓冲区是地理空间目标的一种影响范围或服务范围,是对选中的一组或一类地图要素(点、线或面…...

(大众金融)SQL server面试题(3)-客户已用额度总和
今天,面试了一家公司,什么也不说先来三道面试题做做,第三题。 那么,我们就开始做题吧,谁叫我们是打工人呢。 题目是这样的: DEALER_INFO经销商授信协议号码经销商名称经销商证件号注册地址员工人数信息维…...
c语言笔记
1. c语言部分算法列举 1.1 找数 二分查找(前提是数据必须有序) 1.2 求极值 1.3 数组逆序 1.4 排序法(***重点***) 1.4.1 选择排序法 1.4.2 冒泡排序法 1.4.3 插入排序法 2. 字符型数组 2.1 使用格式 char s[10]; …...

6轴机器人运动正解-逆解控制【1】——三种控制位姿的方式
概览: 通过运动学正解控制机器人运动通过运动学逆解控制机器人运动一个简单的物体搬运(沿轨迹运动) 后续会陆续更新(本例仅供学习交流用) 一、6轴机器人 二、运动正解控制 通过修改各个轴的角度,实现末…...
c# Microsoft UI Automation
Microsoft UI Automation(UIA)是一种用于自动化Windows应用程序用户界面(UI)的框架。它允许开发人员编写自动化测试脚本、辅助技术应用程序和其他需要与应用程序交互的工具。以下是一些关于Microsoft UI Automation的重要信息&…...

C#-前后端分离连接mysql数据库封装接口
C#是世界上最好的语言 新建项目 如下图所示选择框红的项目 然后新建 文件夹 Common 并新建类文件 名字任意 文件内容如下 因为要连接的是mysql数据库 所以需要安装 MySql.Data.MySqlClient 依赖; using MySql.Data.MySqlClient; using System.Data;namespace WebApplication1.…...

yolov8 opencv dnn部署自己的模型
源码地址 本人使用的opencv c github代码,代码作者非本人 使用github源码结合自己导出的onnx模型推理自己的视频 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理,所以只使用opencv…...

插槽(64-67)
文章目录 插槽1.插槽 - 默认插槽(组件内可以定制一处结构)2.插槽 - 后备内容(默认值)3.插槽 - 具名插槽(组件内可以定制多处结构)4.作用域插槽(插槽的一个传参语法) 插槽 插槽分类:默认插槽和具名插槽 1.插槽 - 默认插槽(组件内可以定制一处结构) 作用…...
C# LING查询语法学习,扩展方法的使用
class Program { #region 示例1:不使用LINQ查询数组 //static void Main(string[] args) //{ // int[] nums { 1, 7, 2, 6, 5, 4, 9, 13, 20 }; // List<int> list new List<int>(); // foreach (int item in nums) …...

自然语言推断:微调BERT
微调BERT 自然语言推断任务设计了一个基于注意力的结构。现在,我们通过微调BERT来重新审视这项任务。自然语言推断是一个序列级别的文本对分类问题,而微调BERT只需要一个额外的基于多层感知机的架构,如下图中所示。 本节将下载一个预训练好的…...

立创EDA学习:设计收尾工作
布线整理 ShiftM,关闭铺铜显示 调整结束后再使用快捷键”ShiftM“打开铺铜 过孔 在空白区域加上一些GND过孔,连接顶层与底层的铺铜。放置好”过孔“后,隐藏铺铜,观察刚才放置的过孔有没有妨碍到其他器件 调整铺铜 先打开铺铜区&…...

ShardingSphere之ShardingJDBC客户端分库分表上
目录 什么是ShardingSphere? 客户端分库分表与服务端分库分表 ShardingJDBC客户端分库分表 ShardingProxy服务端分库分表 ShardingSphere实现分库分表的核心概念 ShardingJDBC实战 什么是ShardingSphere? ShardingSphere是一款起源于当当网内部的应…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...