草率了,面试被问如何优化查询性能,我说加索引。再次被追问:索引为什么可以让查询变快?...

索引为什么能加速查询?底层原理? 摘要: 索引通过有序数据结构(如B+树)将随机I/O转为顺序I/O,减少数据扫描量(O(log n)复杂度),加速查询。B+树因多路平衡、磁盘友好成为主流实现,哈希索引则适合等值查询但无法范围检索。索引需权衡存储开销与写入性能,设计时应遵循选择性高、最左前缀、覆盖索引等原则。高级机制如索引下推、自适应哈希进一步优化性能。索引失效场景包括使用函数、类型转换等。理解底层原理(如B+树vs二叉树)及EXPLAIN工具的使用对数据库优化至关重要。 阅读详情

概述

人类存储信息的发展历程大致经历如下:

由于是个人凭着自己理解总结的,因此可能不一定精确,但是毋庸置疑的是,在当代,各大公司机构部门的数据都是维护在数据库当中的。数据库作为数据存储介质发展的最新产物,必然是具有许多优点的,其中一个很大的优点就是存储在数据库中的数据访问速度非常快。数据库访问速度快的一个很重要的原因就在于索引index的作用。也就是这篇文章的主要想介绍的内容,为什么索引可以让数据库查询变快?

计算机存储原理

在理解索引这个概念之前,我们需要先了解一下计算机存储方面的基本知识。

我们知道数据持久化之后存在了数据库里,那么我现在的问题是数据库将数据存在了哪里?答案显然是存在了计算机的存储设备上。就个人电脑而言,数据被存在了我们的电脑存储设备上。

计算机的存储设备有很多种,其中速度越快的越贵,因此容量也往往越小例如我们的RAM随机存储器,也就是大家平时说的内存条,速度慢的就相对便宜例如我们的硬盘。而我们的数据往往都是被存在最慢的存储设备硬盘上的,因为存在当中的数据在断电之后依然存在。

计算机的存储介质有多种,例如硬盘,例如告诉缓存,不同的存储介质的数据读取速度是不一样的。例如,像RAM这样的易失性存储设备的读写操作就非常快,访问其中的数据几乎没有延迟性。由于这个原因,计算机操作系统的设计是这样的:数据永远不会直接从硬盘等机械设备中取出,而是首先从硬盘转移到更快的存储设备,例如RAM,从RAM当中应用程序直接按需获取数据。

计算机内部的机械硬盘是下面这样的:

在一个典型的硬盘驱动器中可以有很多个盘片,“盘片”在外观上非常类似于一个光盘(但具有很高的存储容量)。盘片又被磁道分条,同时一个盘片又可以分为扇区。

要获取数据,“盘片”需要由主轴进行旋转。大多数硬盘供应商都提到了主轴旋转的速度,例如,7200转/分和15000转/分。磁盘中的数据总是以扇区的固定大小倍数表示。因此,如果要从硬盘访问数据,需要执行以下步骤,这也是性能开销的主要来源。

  • 确定数据所在的正确磁道,并将磁头移动到该磁道。即通常说的寻道。

  • 让“主轴”旋转盘片,使正确的扇区位于“磁盘头”下方。

  • 从扇区开始到扇区结束获取整个数据。

如果数据恰好分布在连续扇区上,那么它将提高获取数据的性能。因为主轴和磁头本身不需要移动/旋转,也就没有太多开销,但是大多数时候这种开销是存在的。

由于存在这种开销,我们不能直接从硬盘获取数据。RAM的存储器高性能的背后的主要原因是它没有像硬盘那样的机械运动部件。但是尽管RAM的性能很高,但它当中的数据却不会用作永久存储,断电之后就会消失,重新启动之后就什么都没有了,这是我们需要硬盘来进行持久化的原因所在。数据库中的数据毫无疑问就是存放在硬盘当中的,因此访问数据库中的数据不可避免的会经历磁盘操作的开销。

索引是如何工作的?

知道上述知识后,索引就更容易理解了。

举个例子,想象一下,现在有一本500页厚包含几十万字的字典,同时里面的字是无序排列的,现在我需要你从中找出某几个字出来同时不允许查看目录。毫无疑问,我们只能一页一页的翻,这是非人类能接受的工作,我们必然想的是先看目录,找到相关的字或者偏旁,然后去对应的地方查找文字,这样效率就大大提高了。目录事实上就是一种索引,其思想一脉相承。

数据库的索引类似于书中的这个目录。索引会帮助我们快速检索数据库,查询不需要通过整个表来获取数据,而是从索引中找到数据块。以一张数据库表为例:

上表是一张真实的数据库表,其中每一行是一条记录,每条记录都有字段。假设上面的数据库是一个有10万条记录的大数据库。现在,我们想从10万条记录中搜索一些内容,那么挨着一个一个搜索无疑将花费很长的时间,这个时候我们在数据结构与算法里学的二分查找法就派上了用场。

二分查找法

使用二分查找法,需要将数据先排序,但是其查询效率将大大提高。例子如下:

假设我们在上面的数据库中使用的是固定长度的记录,固定块记录大小为205个字节, 默认块大小是1024字节。则:

固定记录大小=204字节,块大小=1024字节

所以每个数据块的记录数=1024/204=5条记录,10万条记录就是2万个块

不使用任何算法,我们要查询100000条记录中的某一条,,在最坏的情况下我们需要遍历一遍2万block才能获得全部100000条记录。但如果进行二分查找,则只需要进行20000的对数基数2,即14.287712次即可。这意味着我们只需对排序后的值进行14次搜索,就可以使用二分查找到您感兴趣的唯一值。

上图是对一串数字生成的二叉查找树。其时间复杂度为O(n)=O(log2N),即以2为底,n的对数。其中n为查找目标群体的总数据量。

例如,假设N为8,则O(n) = O(2为底8的对数) = O(3).

遍历方式,其时间复杂度为O(n)

在上述例子当中,n就是10000。使用索引的时间复杂度为O(2为底10000的对数) 大约等于 13. 和O(10000)之间差大概800倍。

索引为何使得查询变快?

这个时候我们就能直接回答上述问题了,建立了索引的数据,就是通过事先排好序,从而在查找时可以应用二分查找来提高查询效率。这也解释了为什么索引应当尽可能的建立在主键这样的字段上,因为主键必须是唯一的,根据这样的字段生成的二叉查找树的效率无疑是最高的。

为什么索引不能建立的太多?

如果一个表中所有字段的索引很大,也会导致性能下降。想象一下,如果一个索引和一个表一样长,那么它将再次成为一个需要检查的开销。这就好比字典的目录非常详细,但是其长度已经和所有的文字一样长,这个时候目录本身的效率就大大下降了。

索引有弊端吗?

肯定是有的,索引可以提高查询读取性能,而它将降低写入性能。当有索引时,如果更改一条记录,或者在数据库中插入一条新的记录,它将执行两个写入操作(一个操作是写入记录本身,另一个操作是将更新索引)。因此,在定义索引时,必须牢记以下几点:

  • 索引表中的每个字段将降低写入性能。

  • 建议使用表中的唯一值为字段编制索引。

  • 在关系数据库中充当外键的字段必须建立索引,因为它们有助于跨多个表进行复杂查询。

  • 索引还使用磁盘空间,因此在选择要索引的字段时要小心。

什么是聚集索引

聚集索引clustered index也叫聚簇索引,它的定义是:聚集索引的表中数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。

例如:

结合上面的表格就很好理解了:数据行的物理顺序与列值的顺序相同,如果我们查询id比较靠后的数据,那么这行数据的地址在磁盘中的物理地址也会比较靠后。聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。

为什么查询更快呢?我们通过上面的分析知道了索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。

主键一般会默认创建聚集索引。

在创建聚集索引之前,应先了解您的数据是如何被访问的。可考虑将聚集索引用于:

包含大量非重复值的列。使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。被连续访问的列。返回大型结果集的查询。经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。OLTP型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建聚集索引。聚集索引不适用于:

频繁更改的列 这将导致整行移动,因为 SQL Server 必须按物理顺序保留行中的数据值。这一点要特别注意,因为在大数据量事务处理系统中数据是易失的

索引失效的典型例子

条件中用or,即使其中有条件带索引,也不会使用索引查询,这就是查询尽量不要用or的原因,用in吧。

常见的sql优化手段有哪些

1.避免全表扫描

全表扫描往往发生在下面几种情况:

  • SQL的on子句或者where子句涉及到的列上没有索引;

  • 表数据量很小,走索引查询比全表扫描更麻烦;这对于少于10行且行长度较短的表来说很常见

2.避免索引失效

不在索引列上做任何操作(计算,函数、自动or手动类型转换),这样会导致索引失效而转向全表扫描。

存储引擎不能使用索引中范围条件右边的列。这个是因为age中查询时范围查询了,pos列的索引就没有生效了

尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *。

对于MySQL而言

  • mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描

  • is null,is not null也无法使用索引

  • like 通配符开头'%abc..',mysql索引会失效会变成全表扫描的操作

3.避免排序,不能避免,尽量选择索引排序
4.避免查询不必要的字段
5.避免临时表的创建,删除

来源:blog.youkuaiyun.com/topdeveloperr/article/details/88742503

MySQL实战进阶:从安装配置到性能优化的数据库工程师心法 数据库作为现代应用的核心数据存储与管理系统,其核心价值在于高效、安全、可靠地管理结构化数据。其工作原理基于客户端-服务器模型,通过SQL语言进行交互,并利用存储引擎(如InnoDB)实现数据的持久化与事务处理。掌握数据库技术对于构建高性能、可扩展的应用系统至关重要,广泛应用于电商、金融、内容管理等各类在线业务场景。本文聚焦于MySQL这一主流关系型数据库,深入探讨其生产环境部署的核心要点。其中,**my.cnf配置文件**的调优是性能基石,涉及内存缓冲池、日志刷写策略等关键参数设置;而**主从复制(Repl 阅读详情

相关推荐

MySQL主键设计实战:聚簇索引、自增ID与安全变更指南

主键是关系型数据库的核心机制,不仅承担唯一性约束功能,更直接决定数据物理存储结构(如InnoDB的聚簇索引)。其设计深刻影响插入性能、二级索引体积、范围查询效率及分布式ID生成可靠性。自增整数因顺序写入与紧凑存储成为单机场景首选,而UUID虽保证全局唯一却易引发页分裂与索引膨胀;复合主键则需严格遵循最左前缀原则以支撑高频查询。在生产环境中,ADD PRIMARY KEY本质是全表重建,存在锁表、磁盘耗尽与主从延迟等高危风险。本文聚焦真实工程场景,覆盖主键选型、聚簇索引原理、在线变更四步法及ORM映射陷阱,为

weixin_34356555的博客 325

MySQL索引为什么会快

MySQL 的索引是如何提高查询效率的? 一. 索引是什么? 索引是数据库中用来提高查询效率的技术,类似于目录。如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直到找到数据为止,使用索引后会将磁盘块以树桩结构保存,查询数据时会大大降低磁盘块的访问数量,从而提高查询效率。如果表中的数据很少,使用索引反而会降低查询效率。并且索引会占用磁盘空间,一般只针对查询时常用的字段创建索引。索引分为聚集索引和非聚集索引,通过主键创建的索引称为聚集索引,聚集索引中保存数据,只要给表添加主键约束,

蔡定努 2933

别再只跑recon-all了!FreeSurfer实战:从T1图像到freeview可视化的完整避坑指南

本文详细解析FreeSurfer从T1图像处理到freeview可视化的全流程,包括环境配置、recon-all深度解析、高级可视化技巧及性能优化策略。特别针对常见错误提供解决方案,帮助用户高效完成MRI数据分析,避免常见陷阱。

weixin_33404102的博客 353

为什么索引可以让查询变快,你有思考过吗?

概述人类存储信息的发展历程大致经历如下:由于是个人凭着自己理解总结的,因此可能不一定精确,但是毋庸置疑的是,在当代,各大公司机构部门的数据都是维护在数据库当中的。数据库作为数据存储介质发展...

Java笔记虾 813

【CTFSHOW】web入门 黑盒测试

文章目录写在前面web380web381web382web383web384web385web386web387web388web389web390web391web392web393web394web395参考资料 写在前面 一直没搞过渗透,先学学黑盒测试吧 web380 进入题目发现是一个关于灯泡的悲伤故事,点进去,看到跳转到page_1.php页面。 我们访问page.php试试: 发现报错:$id.php,可以猜想需要传名称为id的参数,来访问id.php。我们访问page.php?id=1试试

7ruth0hn的博客 1898

【tensorrt】——深入解析TypeError: pybind11::init()报错:CUDA版本冲突与解决方案

本文深入解析了TensorRT中常见的TypeError: pybind11::init()报错问题,重点探讨了CUDA版本冲突的根源与解决方案。通过实际案例展示了PyTorch与TensorRT的版本兼容性问题诊断方法,并提供了conda环境管理、环境变量配置等实用修复技巧,帮助开发者有效解决CUDA初始化失败问题。

ggg99的专栏 272

高薪面试题:索引为什么会加快查询效率?深入理解MySQL索引原理和实现

说到索引,很多人都知道“索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。但是索引是怎么实现的呢?因为索引并不是关系模型的组成部分,因此不同的DBMS有不同的实现,我们针对MySQL数据库的实现进行说明。

weixin_71690375的博客 1703

TI MSPM0G3507 循迹小车强制寻黑线代码一

一个基于MSPM0微控制器的循迹小车控制系统。系统通过8路循迹传感器检测黑线位置偏差,使用PID算法计算电机控制量。主程序初始化中断、PWM等外设,在按键触发后进入循迹模式。传感器数据处理函数根据检测到的黑线位置返回偏差值(-7到7),PID控制器根据偏差调整左右电机速度。系统还包含限幅处理、中断服务等模块,实现稳定的自动循迹功能。代码结构清晰,展示了嵌入式系统中传感器数据处理、电机控制和PID算法的典型实现方式。

雾削木的优快云博客 1856

为什么数据库索引查询会快

一、使用索引的好处         创建索引可以大大提高系统的性能。第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中,使用

2万+

基于CPCC_S_TASK_LIST_MAINTAIN的工艺路线组件批量分配实战与避坑指南

本文详细解析了SAP PP模块中基于CPCC_S_TASK_LIST_MAINTAIN函数实现工艺路线组件批量分配的实战技巧与避坑指南。针对批量分配的核心挑战,提供了参数配置、BAPI协同使用、Excel导入等解决方案,并分享了大容量数据处理优化经验,帮助用户高效完成工艺路线组件分配任务。

weixin_33563728的博客 307

华为昇腾(Ascend)开发考试原题目解析 (2024) (题库一)——HCIP-AI-Ascend Developer——第一部分

给出一段代码如下,以下哪个选项描述错误?...A.中的语句由 MindSpore 接管,有语法限制B. 算子在中定义,并用来建立网络C.__init__()中的语句由 Python 解析执行D. 网络定义必须继承基类nn.Cell正确答案: B__init__()用于定义算子和网络层。所有需要用到的层(如卷积层、全连接层等)都应该在这里进行实例化。这部分代码由Python解释器执行。用于构建前向计算图。它调用在__init__()中定义好的算子和层来描述数据的流向。

qq_38334677的博客 1054

草率了!阿里面试官跟我死磕MySQL底层,不小心我就拿了个高薪offer

我就是在自己的简历上写了精通MySQL,然后就开启了和阿里面试官的死磕之路,结果就是拿到了一份不错的高薪offer。

测试萌萌 522

从 RAP OData 到可交付的 SAP Fiori 应用:部署与授权全链路实战笔记

摘要:本文探讨了RAP开发中常见的交付误区,指出开发者预览(FEAP)并非可部署应用,强调从服务发布到业务应用落地的完整链路。文章详细对比了不同部署路径(ABAP/BTP),解析权限管理关键点(SAP_BR_DEVELOPER的临时性),并提供了标准授权组合方案(IAM+业务目录+角色)。通过"发运跟踪"案例,展示了从开发验证到生产部署的全流程,特别提醒注意开发环境与生产环境的权限差异,避免"开发机正常、生产机403"的典型问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1402

记一个小白的第一次社招面试

在51job上投了好几家简历,最后只有一家打电话约我去面试(可能51job上的简历写得太差了吧--|||),约的是下午三点,结果我两点40就到了,刚好没有人来面试,就直接给我面了。 先是做了个自我介绍,然后面试官就拿着简历开始问我。 谈谈你对于redis的理解(自己作死,简历上写了熟悉redis,结果mysql和orcal都没问,就问了redis,之前答得很草率,下面的答案是我自己回来好好看了...

Freak_ysy的博客 2189

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java中高级面试八股文:知识主线与每日刷题实战指南

在Java后端开发与面试准备中,基础知识体系是否扎实,往往决定了候选人能否从容应对大厂的多轮技术面。面试官通过高频考点快速评估技术深度,背后考察的是对JVM、并发编程、集合原理、Spring、MySQL、Redis及分布式等核心机制的真正理解。掌握基础知识的主线逻辑,比机械背诵答案更重要。 HashMap底层为什么引入红黑树、线程池参数如何设置、索引为何使用B+树,这些问题背后都对应一套完整的原理链条。只有将零散知识点串联成知识网络,把“每日刷几道”转化为有节奏的精刷与复盘,才能在中高级面试中准确表达技术思

weixin_30252709的博客 406

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

S学长美团&&美团优选面经

美团 首先上来介绍自己 这里没什么说的,硬要说坑的话就是突出说了粮储那个项目,其实简历上Redis这块也蛮坑的,说实话有时间应该系统的学习下Redis了,不能每次问到都不会了。 问项目 因为前阵子看数据库看的比较多,所以一直把面试官往这里引导,不过问粮储的原因导致这里准备的不是很充分,索引加的有点莫名其妙,总结下来应该多看看索引的实际应用这里。感觉我应该说在公司名称上加索引要更好。 索引的原理 这里主要问了索引为什么使用B+树,感觉自己答得不是很好,首先B+树拥有B树的全部优点,每个节点增加了多个子节点,每

学习分享平台 978

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

mysql删除没有索引页_InnoDB中没有主键是如何运转的

InnoDB聚簇索引的背景在InnoDB索引页的物理结构中,“我”讲述了”InnoDB中一切都是索引“。这意味着每个InnoDB引擎的表必须有一个“聚簇索引”,通常是主键。在手册中聚簇索引和第二索引有说:如果表中没有主键或者一个合适的的唯一索引,InnoDB内部会以一个包含行ID值的合成列生成一个隐藏的聚簇索引。表中的行是按照InnoDB分配的ID排序的。行ID是一个6字节的字段,随着一个新行的插...

weixin_39625162的博客 198

数据分析SQL面试全攻略:从基础语法到业务场景高频考点精讲

SQL是数据分析师与商业分析师的必备技能,面试考察的不仅是语法记忆,更是逻辑拆解、业务理解与代码习惯的综合体现。理解SQL底层执行逻辑,掌握JOIN、聚合去重、空值处理等基础概念,是解决复杂查询的前提。在此基础上,窗口函数作为进阶利器,能让每一行数据同时保留明细与聚合结果,支撑排名、累计、同比环比等分析需求。实际业务中,去重查询与数据清洗常需结合ROW_NUMBER实现分组去重,而慢SQL优化则要求合理设计过滤条件与索引使用。留存率、复购率、连续登录等经典业务场景,本质是分组计数与条件计数的组合应用,通过S

weixin_33922672的博客 310

中小厂面经:从投简历到技术面的务实上岸指南

技术面试的评估维度因企业规模而异。大厂重潜力与算法基础,而中小厂更看重即战力和项目落地能力,其招聘流程短、问题务实,核心逻辑是“招进来能干活”。理解这一原理后,求职者应把准备重心从刷题转向盘活真实项目,深挖技术栈应用场景与踩坑解决方案。从简历投递、电话初筛、技术面到薪资谈判,每个环节都有可复用的方法:写清楚项目背景与成果、用“原理+案例+优化”回答技术题、把离职原因与职业规划闭环、报价前先问清薪资结构。这套经验适用于Java后端、前端、测试等岗位,尤其适合想高效上岸的跳槽者。围绕中小厂面试全流程,本文梳理出

weixin_34375251的博客 338

面经-【兴业证券】【京东】【网易】

海投无数公司。线上笔试也做了N多,终于有机会参加面试了。。整理一下最近的一些面经,便于复习,也希望对他人有帮助。 【兴业证券】【京东】【网易】 【京东】-很感谢京东给我第一次面试大厂的机会,虽然一面就挂了。。 1、自我介绍 2、项目亮点,针对亮点说说自己为什么这么实现,有没有什么可以改进的地方 3、HashMap,以及各种数据结构,排序算法的时间复杂度(真的是各种。。) 4、数据库索引(聚簇

integrity 1048

如何让新插入的主键自动取最大值_InnoDB中没有主键是如何运转的

InnoDB聚簇索引的背景在InnoDB索引页的物理结构中,“我”讲述了”InnoDB中一切都是索引“。这意味着每个InnoDB引擎的表必须有一个“聚簇索引”,通常是主键。在手册中聚簇索引和第二索引有说:如果表中没有主键或者一个合适的的唯一索引,InnoDB内部会以一个包含行ID值的合成列生成一个隐藏的聚簇索引。表中的行是按照InnoDB分配的ID排序的。行ID是一个6字节的字段,随着一个新行的插...

weixin_39706367的博客 135

Spring Boot+微信小程序商家优惠活动系统:领券核销全栈实战解析

全栈开发是当前互联网应用的主流模式,前端负责交互体验,后端支撑业务逻辑。在轻量级营销场景中,微信小程序以“免安装、用完即走”成为理想的前端载体,而Spring Boot凭借成熟的生态和快速启动能力,成为后端服务的首选框架。两者结合可完整覆盖从商家创建活动、用户领券、到店核销到管理端数据统计的业务闭环。这一过程中涉及登录鉴权、并发防超发、文件上传、列表分页等核心技术点,也是毕业设计与工程实践中的高频考查内容。本文以商家优惠活动系统为切入点,系统讲解需求拆解、数据库建模、核心接口实现与真机调试要点,帮助开发者理

weixin_33416697的博客 149

主键自增 修改序列_InnoDB中没有主键是如何运转的

InnoDB聚簇索引的背景在InnoDB索引页的物理结构中,“我”讲述了”InnoDB中一切都是索引“。这意味着每个InnoDB引擎的表必须有一个“聚簇索引”,通常是主键。在手册中聚簇索引和第二索引有说:如果表中没有主键或者一个合适的的唯一索引,InnoDB内部会以一个包含行ID值的合成列生成一个隐藏的聚簇索引。表中的行是按照InnoDB分配的ID排序的。行ID是一个6字节的字段,随着一个新行的插...

weixin_36204407的博客 108

基于SpringBoot的小说阅读系统设计与实现:从数据建模到阅读链路优化

在Java后端开发中,内容平台类系统是检验综合能力的典型场景,它涉及用户体系、内容管理、状态流转、缓存加速、搜索推荐与并发控制等核心知识。如何在高并发阅读场景下保障响应速度与数据一致性,是这类系统的关键挑战。通过合理的数据建模(如章节表与正文分离、书籍状态机)、引入Redis热点缓存、设计书架与阅读进度的异步更新机制,并配合基于标签分类的搜索推荐策略,可有效支撑完整阅读链路。基于SpringBoot在线小说创作与阅读分享平台的开发实践,系统性地展示了从功能规划、表结构设计、阅读链路优化到审核流程落地的完整方

weixin_34199764的博客 297
上一篇: 实现 Excel 导入导出
下一篇: 面试官:为什么 SpringBoot 的 jar 可以直接运行?
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值