当前位置: 首页 > news >正文

概念杂记--到底啥是啥?(数据库篇)

文章目录

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

立创EDA学习:设计收尾工作

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

ShardingSphere之ShardingJDBC客户端分库分表上

目录 什么是ShardingSphere&#xff1f; 客户端分库分表与服务端分库分表 ShardingJDBC客户端分库分表 ShardingProxy服务端分库分表 ShardingSphere实现分库分表的核心概念 ShardingJDBC实战 什么是ShardingSphere&#xff1f; ShardingSphere是一款起源于当当网内部的应…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...