概念杂记--到底啥是啥?(数据库篇)
文章目录
- 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是一款起源于当当网内部的应…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...