概念杂记--到底啥是啥?(数据库篇)
文章目录
- 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是一款起源于当当网内部的应…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
41道Django高频题整理(附答案背诵版)
解释一下 Django 和 Tornado 的关系? Django和Tornado都是Python的web框架,但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架,鼓励快速开发和干净、实用的设计。它遵循MVC设计,并强调代码复用。Django有…...
VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...
前端打包工具简单介绍
前端打包工具简单介绍 一、Webpack 架构与插件机制 1. Webpack 架构核心组成 Entry(入口) 指定应用的起点文件,比如 src/index.js。 Module(模块) Webpack 把项目当作模块图,模块可以是 JS、CSS、图片等…...
安宝特方案丨从依赖经验到数据驱动:AR套件重构特种装备装配与质检全流程
在高压电气装备、军工装备、石油测井仪器装备、计算存储服务器和机柜、核磁医疗装备、大型发动机组等特种装备生产型企业,其产品具有“小批量、多品种、人工装配、价值高”的特点。 生产管理中存在传统SOP文件内容缺失、SOP更新不及、装配严重依赖个人经验、产品装…...
