MySQL之索引

基于deepseek本地模型的本地知识库构建 通过以上步骤,你已经成功构建了一个基于 AnythingLLM 和 LM Studio 的本地知识库。这个系统不仅能够高效地存储和检索知识,还能结合强大的语言模型生成准确的回答。你可以根据自己的需求进一步扩展和优化这个系统,比如增加更多的文档格式支持、优化检索算法等。 阅读详情

MySQL高级

一、索引

1. 为什么使用索引?

目的就是为了减少磁盘 I/O 的次数,加快查询速率。

2. 索引及其优缺点

2.1 索引概述

MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。

索引的本质:索引是数据结构。理解:排好序的快速查找数据结构。索引是在存储引擎中实现的,因此每种存储引擎的索引结构可能不完全相同。

2.2 优点
  1. 提高数据检索效率,降低数据库 I/O 成本,是创建索引最主要的原因;

  2. 创建唯一索引可以保证数据库中每一行数据的唯一性;

  3. 加速表之间连接(如外键列);

  4. 分组和排序操作中显著提高查询效率,降低 CPU 消耗。

2.3 缺点
  1. 创建和维护索引耗费时间,随着数据量增大,维护成本也增加;

  2. 索引占用磁盘空间;

  3. 影响数据的插入、删除、更新性能,特别是在频繁写操作场景中。

2.4 常见索引概念

3. 聚簇索引(Clustered Index)

定义:聚簇索引不是一种单独的索引类型,而是一种数据存储方式。即:索引即数据,数据即索引,数据行和相邻键值存储在一起。

  • 叶子节点:存储真实数据行;

  • 非叶子节点:存储页号和最小主键值。

特点:

  • InnoDB 自动创建主键作为聚簇索引;

  • 每个表只能有一个聚簇索引;

  • 不支持的引擎如 MyISAM 默认使用非聚簇索引。

优点:

  • 查询效率高(主键查找、范围查询);

  • 减少 I/O 操作,提升性能。

缺点:

  • 插入顺序不合理时容易页分裂;

  • 更新主键开销大;

  • 二级索引访问需二次查找(回表)。


4. 二级索引(辅助索引 / 非聚簇索引)

定义:基于非主键字段创建的索引,叶子节点只存储索引列的值和对应的主键值,不存储整行数据。

查询流程:

  1. 使用二级索引定位目标字段的值;

  2. 根据主键值,回表查询完整记录(再次访问聚簇索引)。

非叶子节点:存储索引列值和子页的映射。

总结:

  • 聚簇索引的叶子节点存储整行数据;

  • 非聚簇索引叶子节点存储的是数据地址(主键);

  • 一个表只能有一个聚簇索引,但可以有多个非聚簇索引。

5. 联合索引(组合索引)

定义:将多个列组合在一起创建的一个索引,提高多条件查询的性能。

特点:
  • 遵循最左前缀原则:

    • 索引字段顺序为 (a, b, c),查询中必须包含最左字段 a 才能使用该索引;

    • 如 WHERE a=?、WHERE a=? AND b=? 可使用索引;

    • WHERE b=? 或 WHERE c=? 无法使用该索引。

  • 覆盖索引:

    • 若查询字段都包含在索引中,则无需回表,性能更高。

  • 索引复用性好:

    • 可以减少单列索引的数量。

示例:

索引定义为 (name, age, gender):

查询语句是否使用索引
WHERE name = '张三'✅ 使用索引
WHERE name = '张三' AND age = 18✅ 使用索引
WHERE age = 18❌ 不满足最左前缀
WHERE name = '张三' AND gender = '男'✅ 使用部分索引 + 回表

6.MyISAM中的索引方案

MyISAM引擎使用B+Tree作为索引结构,叶子结点的data域存放的就是数据记录的地址。

MyISAM的索引存储和数据存储是分离的,并且MyISAM中没有聚簇索引,都是二级索引。

二、InnoDB 与 MyISAM 索引结构对比

特性InnoDBMyISAM
聚簇索引(Clustered Index)✅ 支持,默认以主键构建聚簇索引,数据和索引存储在同一棵 B+ 树中❌ 不支持,数据和索引分开存储,索引只保存数据地址
主键索引结构B+ 树,叶子节点存储完整的数据行B+ 树,叶子节点存储的是数据文件的地址
二级索引结构叶子节点存储的是索引列 + 主键值,需回表查询完整记录叶子节点存储的是索引列 + 数据地址,也需回表但是直接跳转数据位置
数据行存储顺序数据根据主键顺序存储(物理排序)数据物理存储顺序与插入顺序一致,与索引无关
支持事务✅ 支持(ACID)、支持行级锁❌ 不支持事务,使用表级锁
支持外键✅ 支持❌ 不支持
锁机制行级锁,并发性能更好表级锁,并发性能较差
全文索引(全文搜索)5.6 之后开始支持,性能不如 MyISAM✅ 默认支持全文索引
空间和性能占用空间略大,写入性能略低于 MyISAM,但支持高并发、数据一致性占用空间小,读取性能快,写入较快但数据安全性和并发能力较差
崩溃后数据恢复能力✅ 支持事务日志恢复,数据安全性高❌ 数据容易丢失,恢复能力差

总结建议:

  • 若项目对 数据一致性、并发性能、事务性要求高,建议使用 InnoDB。

  • 若项目以 读为主、数据变化不频繁,且对事务要求不高,可以考虑使用 MyISAM。

深入解析线性反馈移位寄存器(LFSR)的工作原理与实现 本文深入解析了线性反馈移位寄存器(LFSR)的核心原理与实现方法。通过生动的比喻和详细的步骤拆解,阐述了LFSR如何通过反馈多项式和移位操作生成伪随机序列,并对比了斐波那契型与伽罗瓦型两种硬件结构。文章还涵盖了LFSR在数字电路测试、通信扰码及快速伪随机数生成等关键应用场景,同时指出了其在密码学中的局限性,并提供了Python和C语言的高效实现代码示例。 阅读详情

相关推荐

第八章 MobileNetv3网络详解

本文介绍了基于互补的搜索技术和新颖的架构设计的MobileNets的下一代。MobileNetV3通过硬件感知网络架构搜索(NAS)和NetAdapt算法相结合,针对移动电话CPU进行优化,随后通过新颖的架构改进技术进行了进一步提高。本文开始探索自动化搜索算法和网络设计如何相互协作,以利用互补的方法改进整体技术水平。通过此过程,我们创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用情况。

ADICDFHL的博客 1万+

MySQL为数据创建索引的目的_为数据表创建索引的目的是什么

一、SQL创建索引的目的如下:1、通过唯一性索引(unique)可确保数据的唯一性;2、加快数据的检索速度;3、加快表之间的连接;4、减少分组和排序时间;5、使用优化隐藏器提高系统性能。二、创建SQL索引的语法:CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED](索引类型) INDEX ON ( [ASC|DESC][, [ASC|DESC]...])。扩展资料:...

weixin_32576389的博客 6954

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月14日-Clamshell 拆卸与安装

Clamshell 拆卸与安装。

weixin_46735260的博客 1691

简单聊聊mysql建表时为什么要创建索引

索引是一种特殊的数据结构,它可以对数据库表中的某一列或多列的值进行排序,并创建一个快速访问的路径,从而加快数据库的查询操作。3. 过多或不合理的索引会降低性能:过多的索引会增加数据库的维护负担,并且在更新数据时需要更新多个索引,导致性能下降。因此,在创建索引时需要谨慎考虑,并根据具体的查询需求和数据表的特点选择合适的列作为索引,以充分发挥索引的优势,避免索引带来的不良影响。4. 提高连接查询性能:当进行连接查询时,如果连接的列有索引,可以减少连接操作的时间,提高连接查询的性能。

qq_62923382的博客 722

Uniapp-APP后台保活插件(安卓后台保活)

Uniapp-APP后台保活插件(安卓后台保活)亲测有效!

weixin_57844432的博客 1万+

MIT IDSS深度解析:跨学科融合与系统科学实践

麻省理工学院的IDSS(Institute for Data, Systems, and Society, IDSS)是一个致力于通过先进分析方法推动教育与研究的前沿机构。它将工程学、信息科学和数据科学的方法与社会科学的分析方法相结合,以应对复杂的社会挑战。

AllenLV的博客 2087

Mysql为什么要使用索引

 MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。快速到底   影响数据库效率的原因千千万万,使用索引是为了解决哪方面的数据库的瓶颈? 点一   MySQL 数据库存储数据最终是以文件的形式存储到硬盘的。一般来说,我们在程序中使用的时候肯定要把磁盘文件中的数据读到内存中。那么就这个 “读” 的过程是什么样子的呢?磁盘读取数据靠的是机械运动,每次读取数据花费的时间可以分为寻道时间、旋转延迟、传输时间三个部分,寻道时间指的是磁臂移动到指定磁道所需要的时间,主流

pengjianglilive的专栏 854

告别视频广告:OpenWrt下luci-app-adbyby plus/lite的完整配置与避坑手册

本文详细介绍了在OpenWrt路由器上配置Adbyby Plus/Lite广告屏蔽工具的完整流程与优化方案。从环境准备、规则文件手动配置到高级性能调优,帮助用户有效拦截视频前贴片广告和弹窗广告,提升家庭网络浏览体验。特别针对官方源停止维护的问题,提供了实用的规则更新解决方案。

weixin_29306011的博客 743

mysql 索引的目的是什么_SQL 创建索引的目的是什么?

索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引是一项技术性要求高的工作。一般在数据库设计阶段的与数据库结构一道考虑。应用系统的性能直接与索引的合理直接有关。下面给出建立索引的方法和要点。§3.5.1 建立索引1. CREATE INDEX命令语法:CREATE INDEXCREATE [unique] INDEX [user.]inde...

weixin_31115505的博客 2420

基于PLC的茶叶揉捻机自动控制系统设计【附代码】

茶叶揉捻是初茶加工过程中的一道关键工序,通过揉捻可以使鲜茶叶成条、碎茶及叶组织细胞破损等。影响茶叶成条率、碎茶率和叶组织细胞破损的主要因素包括揉捻时间、压力和揉捻桶转速。为了提高茶叶品质的稳定性和减轻工人的劳动强度,本文提出了一种基于PLC自动控制技术的茶叶揉捻机控制系统设计。📊 PLC自动化设计 | 毕业设计指导 | 工业自动化解决方案。✅ 具体问题可以私信或查看文章底部二维码。✅ 感恩科研路上每一位志同道合的伙伴!

lagougongzuoshi的博客 1344

关务管理项目专题:SAP 与关衡关务系统的进出口报关业务集成(1)需求和方案整理

一个拥有进出口业务的企业就需要报关,而关务系统就是用来辅助企业日常进出口报关,同时数字化、合规化报关业务的有效工具。本章属于关务管理项目专题系列,以 SAP 与关衡关务系统的进出口报关业务集成为实例,详细讲解报关业务的需求和方案整理。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 2078

MySQL数据库索引

索引是帮助MySQL 高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引向(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

new9232的博客 2048

【深度学习总结_02】在自己的数据集微调SAM

使用医疗影像数据微调SAM

qq_41234663的博客 1万+

【MySQL】索引

介绍索引,建立MySQL与磁盘交换的基本单位的共识,深入理解索引,最后进行索引操作!

YoungMLet的博客 6501

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

MySQL —— 索引

介绍MySQL 的索引,索引的运作流程分析,索引的创建修改以及删除。

熵减玩家 3263

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySql 索引

MySql 索引底层原理和实现,MySql索引创建,删除,使用。

2301_76293625的博客 2308

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MySQL索引

MySQL系列: 1.了解索引 2.以B+树为索引数据结构的原因 2.1 Hash 索引 2.2二叉搜索树 (BST) 索引 2.3数据结构: N 叉树(例如 B 树) 2.4数据结构: B+ 树 2.5为什么 B+ 树是数据库索引的首选 3.MySQL页 3.1使用页的原因 3. 2页的结构概览 3.3页文件头和页文件尾 3.4页主体 3.5 页目录: 3.6数据页头 4.索引分类 4.1 主键索引(Primary Key Index) 4.2 普通索引(Secondary Index / Non-Uni

2401_85487314的博客 1216

MySQL——索引

MySQL、索引

2303_78442132的博客 1750

mysql 创建聚集索引_MySQL 索引

目录1、索引原理2、索引分类(Index Class)3、索引操作4、索引使用策略5、总结来源:segmentfault.com/a/1190000014906118#item-51、索引原理我们知道,MySQL 查询数据是从第一条记录开始依次查找,直到读完整个表或者找到匹配的行。数据库表的数据量越大,MySQL 查询所花费的时间就越多。索引的出现就是为了改善查询性能的。MySQL 官...

weixin_39760206的博客 4765

mysql索引年龄索引_MySQL索引

1.提升查询效率类似字典,比如:年龄为20的都在第几页,把20和页码都存放在索引中下一次查询时,不从第一页,一条一条的查询,而是根据索引信息快速的查询出数据。索引本身也要耗费存储空间的,跟字典中的拼音查询、部首查询占字典的页数一样。2.其他的增删改,效率降低索引还会浪费增删改效率,除了查询效率高了以外,其他的增删改效率都低了。(数据页的数据改动也需要改动索引页相对应的数据)3.MySQL索引类型3...

weixin_42631411的博客 1320
上一篇: 工厂模式之简单工厂
bigdataing
博客等级 码龄5年 33粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bigdataing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值