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

Sql Server 索引性能优化 分析以及分表

定位需优化语句
  1. 根据工具 skywking 或者开启慢查询日志 找到 慢sql 的语句
  2. 根据 ==执行过程 ==来 判断 慢的原因
    row filter 指标 看查了多少数据 比例多少
    type 看下是单表 还是 join联表
    比如 执行步骤多 没索引
优化方向
  1. 减少执行次数
  2. 索引 没索引考虑加索引 加索引 尽量选择 int 字节小 或者字符串如果能控制就固定 比如 name varchar(20就够的话 就不要100)这样 索引页存储 索引值多 因为涉及到 的概念 非聚集索引尽量覆盖索引 减少RID 回表的情况
  3. 加了索引的话 考虑是否失效
  4. 有索引使用性能还是不行 考虑一下 是不是IO 频率次数多引起的 比如 页碎片 行溢出
  5. 性能还是不行的话 就考虑 =分表分库 减少这个IO频率
索引设置层面优化点

索引设置 所以最好就是int 如果是 varchar 固定大小 时间索引也要固定大小
索引失效情况

  1. sql 语句不妥 用了 or 另一字段没有索引 需要or的字段也要有索引
  2. 用了 like %在前面 没有索引
    可以覆盖索引 select * from table where id like ‘1%’ 改为 select id from table where id like ‘1%’ 用id 覆盖 索引
    或者 %写后面
  3. 用函数
  4. 联合索引 主次 顺序 次的 不走索引
  5. 字段可否为空 与 is not null 有关系 没设置 写的话 不走索引
页、区
  1. 页(Page)——数据存储的“书页”​
    ​定义
    页是 SQL Server 中数据存储的最小单位,类似于一本书中的一页纸。​每个页固定大小为 8KB​(8,192字节),所有数据(包括表数据、索引、系统信息)均以页为单位存储和读取。
    ​页的结构
    每个页由三部分组成(见图1):
    页头(96字节)​:存储系统信息(如页码、页类型、可用空间等)。
    数据区(约8,000字节)​:存放实际数据行或索引条目。
    ​行偏移表(行指针)​:记录每行数据的起始位置,类似书页的“页码索引”,从页尾向前倒序排列。
    ​类比:想象一页纸,页头是标题和作者信息,数据区是正文内容,行偏移表是每段文字在页中的位置索引。

  2. ​页的类型
    数据页:存储用户表的具体数据行(如 varchar、int 等普通列)。
    ​索引页:存储索引结构(如 B+ 树的中间节点),帮助快速定位数据。
    特殊页:如管理空间分配的 GAM/SGAM 页、记录大文本的 Text/Image 页等。

  3. 区(Extent)——管理页的“章节”​
    ​定义
    区是 ​8个连续页的集合​(共64KB),用于高效管理页的分配。相当于将多个书页装订成章,避免零散存储。
    ​区的类型
    混合区:区内的8个页可分配给不同对象(如表、索引)。​新创建的小表默认使用混合区,节省空间。
    ​统一区:区内的8个页专属于同一个对象。​当表或索引增长到8页以上时,自动升级为统一区,提高连续读写效率。
    ​类比:混合区像共享办公室,多个租户共用;统一区像独立办公室,仅供一家公司使用

索引页与数据页
  1. 数据页(Data Page)——存放“书的内容” 也就是表中行数据存储
    存储实际数据行,例如:
CREATE TABLE Students (ID INT, Name VARCHAR(50), Age INT);| 页头 | ID=1, Name="Alice", Age=20 | ID=2, Name="Bob", Age=22 | ... | 行偏移表 |

行溢出:如果某行数据太大(超过 8060B),部分内容会存到其他页(类似书太厚,分上下册)。

  1. 索引页(Index Page)——存放“书的目录” 也就是表设置的 聚集索引或者 非聚集索引

2.1 聚集索引(主键索引)
叶子节点是数据页:数据按主键顺序物理存放(类似书按编号顺序排列)。
非叶子节点是索引页:存储键值范围和子页指针(类似目录的章节导航)。

也就是说 索引页然后找到 叶子数据页 然后根据行数直接找到数据

 [索引页(根)]/      |      \
[索引页(中间)] ... [索引页(中间)]/     |     \             ...
[数据页] [数据页] [数据页]  

2.2 非聚集索引(普通索引)
叶子节点指向数据页:存储索引键值 + 行定位符(RID 或主键值),回表查询数据(类似书末的索引表,标注“主题→页码”)。

也就是说 索引页找到叶子页这些都是索引页的内容,然后通过聚集索引建或RID 回表找到数据
也就是说 非聚集索引 过程多了一步 聚集索引建或RID 回表

        [索引页(根)]/     |     \
[索引页(中间)] ... [索引页(中间)]/    |    \           ...
[叶子页(存RID] ... [叶子页(存RID]

总结
​页是存储的基本单位(8KB),​区是管理页的集合(8页=64KB)。
​数据页直接存数据,​索引页加速查询,两者通过B+树和指针协作

页碎片 行溢出 区分配策略

在使用的过程中肯定会有数据操作,那么 增删改查 势必会对页中的数据存储有一定影响。
数据少了 空间没用完,数据多了空间不够用就会出现以下这些情况。

碎片(Fragmentation)​
碎片分为 ​内部碎片 和 ​外部碎片,影响查询性能和存储效率。

  1. ​内部碎片
    ​定义:页内未充分利用的空闲空间(如删除数据后留下的空白)。
    ​影响:浪费存储空间,增加读取时的 I/O 操作(需扫描更多页)。
    ​示例:若某页实际存储数据仅占 50%,剩余空间无法被其他数据利用。
    ​优化:通过 ALTER INDEX REBUILD 或 REORGANIZE 整理页内空间。
  2. ​外部碎片
    ​定义:页在磁盘上物理不连续(由分页操作导致)。
    ​触发场景:插入或更新数据时原页空间不足,新页与旧页物理分离。
    ​影响:范围查询需跨区读取,增加磁头移动和 I/O 开销。
    ​优化:使用 ALTER INDEX REBUILD 重建索引,或调整填充因子减少分页频率。

填充因子(Fill Factor)​

  1. 作用:控制页初始填充比例(默认 100%),预留空间减少分页。
    ​设置建议:
    读写比 > 100:1 → 100%填充(减少查询 I/O)。
    写频繁 → 50%-70%填充(减少分页)。
    读写平衡 → 80%-90%填充。

行溢出(Row Overflow)​
​触发条件
变长列(如 varchar(max))数据超过页容量(8KB)。
行总大小(含系统信息)超过 8060 字节。
​存储机制

​行溢出指针:原页中保留 24 字节指针,指向溢出页(存储实际数据)。

  1. ​结构示例:
    原页中记录包含溢出指针(如 0x70170000 表示溢出数据长度 6000 字节)。
    溢出页独立存储数据,与原页通过 RID(行标识符)关联。
    ​性能影响
    增加随机 I/O(需读取多个页)。
    建议优化表结构,避免频繁行溢出(如拆分大字段或使用 LOB 类型)。
    ​四、区分配策略(Extent Allocation)​

​区的类型

  1. ​混合区:区内的 8 个页分配给不同对象(适合小表初始分配)。
  2. ​统一区:区内的 8 页专属于同一对象(适用于大表或索引)。
  3. ​分配规则
    ​默认策略:
    新对象(<8页)使用混合区(节省空间)。
    对象增长到 8 页后,转为统一区(提升连续读写性能)。
    ​管理机制:
    ​GAM(全局分配映射表)​:标记区是否已分配(0=已分配,1=可用)。
    ​SGAM(共享全局分配映射表)​:标记混合区是否有空闲页(1=有可用页)。
  4. ​优化场景
    ​小表频繁插入:混合区减少空间浪费。
    ​大表范围查询:统一区提高顺序 I/O 效率。
    ​总结
    ​页是存储基础单元,​碎片分为内部(页内空间浪费)和外部(页物理不连续),通过重建索引或调整填充因子优化。
    ​行溢出通过指针链接溢出数据,需权衡表设计避免性能损耗。
    ​区分配策略通过混合区与统一区的动态切换,平衡空间利用与 I/O 效率。
    实际应用中需结合 sys.dm_db_index_physical_stats 监控碎片,按业务场景调整策略

关键优化点
页碎片:频繁增删数据会导致页不连续,增加磁盘I/O。可通过重建索引调整空间 ALTER INDEX REBUILD 整理。
行溢出:变长列(如 varchar(max))超过8KB时会拆分到其他页,需谨慎设计表结构。
区分配策略:小表优先使用混合区,大表使用统一区提升性能。

设计数据库时需关注页/区分配策略和碎片问题,以优化性能

SQL Server RID 回表详解

回表是针对 表 没有 聚集索引的情况下,非聚集索引怎么去寻找数据的,如果有 聚集索引,就不用通过RID回表直接去 跟着 聚集索引建 流程去数据页找数据

  1. 什么是 RID 回表?
    RID(Row Identifier):当表 没有聚集索引(堆表)时,SQL Server 为每一行数据分配的唯一物理地址,格式为 (文件号:页号:槽号)。
    回表(Bookmark Lookup):通过非聚集索引找到 RID 后,根据 RID 定位到数据页获取完整数据行的过程。
    类比理解:
    想象一本书的末尾有一个“关键词索引”,每个关键词后面标注了对应的页码(类似 RID)。回表就像根据页码翻到正文页面读取完整内容。

  2. 为什么需要回表?
    非聚集索引的局限性:
    非聚集索引的叶子节点 只存储索引键值和 RID(或聚集索引键),不包含其他列的数据。
    若查询需要返回非索引列,必须通过 RID 回表读取数据页
    示例:
    表结构:

CREATE TABLE Students (StudentID INT PRIMARY KEY NONCLUSTERED,  -- 非聚集主键Name VARCHAR(50),Age INT
);
SELECT Name, Age FROM Students WHERE StudentID = 100;
非聚集索引 StudentID 的叶子节点只有 StudentID 和 RID。为了获取 Name 和 Age,必须通过 RID 回表到数据页
如何判断 SQL Server 索引页和数据页的使用情况 以及是否需要分表
  1. 通过系统视图和 DMV 获取索引页数量
    ​核心工具:sys.dm_db_index_physical_stats
    该动态管理视图直接提供索引的物理存储信息,包括索引页数量、碎片率、层级等。
SELECTOBJECT_NAME(object_id) AS TableName,index_type_desc AS IndexType,index_level AS IndexLevel,page_count AS TotalPages,record_count AS TotalRows,avg_fragmentation_in_percent AS Fragmentation
FROMsys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED')
WHEREindex_type_desc IN ('CLUSTERED', 'NONCLUSTERED');
  1. ​关键字段解释:
    index_type_desc:区分聚集索引(CLUSTERED)和非聚集索引(NONCLUSTERED)。
    index_level:索引层级(0为叶级,>0为非叶级)。
    page_count:当前层级的页数。
    avg_fragmentation_in_percent:碎片率

聚集索引的叶级页(index_level=0)是数据页,非叶级页(如根、中间节点)是索引页;非聚集索引的所有页均为索引页

​统计索引页总数
​聚集索引:总索引页数 = 根页数(index_level=最高层级) + 中间层级页数(index_level>0)。
​非聚集索引:总索引页数 = 所有层级的 page_count 之和(包括叶级和非叶级)。

单表总数据量

SELECT SUM(p.rows) AS TotalRows,SUM(au.total_pages) * 8 / 1024 AS TotalSpaceMB  -- 总空间(MBFROM sys.partitions p
INNER JOIN sys.allocation_units au ON p.hobt_id = au.container_id
WHERE p.object_id = OBJECT_ID('YourTableName');

索引页数量的存储原理

  1. 聚集索引的索引页
    ​结构:B+树结构,叶级是数据页,非叶级是索引页(存储键值和指针)。
    ​计算示例:
    假设根页(1页)指向中间层(7页),中间层指向叶级数据页(4000页),则总索引页数为 1+7=8 页,数据页为 4000 页。
    ​唯一性影响:唯一聚集索引的索引页更少,而非唯一聚集索引可能因添加 uniqueifier 列增加页数。
  2. ​非聚集索引的索引页
    ​结构:独立于数据页,叶级存储键值 + 书签(聚集索引键或堆表 RID),非叶级存储导航键值。
    ​页数计算:总索引页数 = 根页 + 中间层页 + 叶级页。
    例如:某非聚集索引根页 1 页、中间层 7 页、叶级 179 页,总索引页数为 1+7+179=187 页。

实际案例与优化建议

  1. 案例:索引页分布分析
    ​聚集索引:若某表总页数为 4020 页,其中数据页 4009 页,索引页(根+中间层)为 11 页。
    ​非聚集索引:若覆盖索引(包含查询所需列)的叶级页数占比高,可能减少回表操作。
  2. 优化建议
    ​监控碎片:高碎片率(如 avg_fragmentation_in_percent > 30%)需重建索引以减少页数。
    ​填充因子调整:写频繁的表可降低填充因子(如 70%),预留空间减少页分裂
分表

判断是否需分表的依据

  1. 数据量阈值
    常规场景:
    单表数据行数 > 5000万 或 存储空间 > 500GB,考虑分表。
    索引页占比过高(如索引页占总页数 >40%),需优化索引或分表。
    高并发场景:
    频繁出现页锁竞争(通过 sys.dm_tran_locks 监控),需水平分表。

  2. 性能指标
    查询延迟:关键查询响应时间超过业务容忍阈值(如 >1秒)。
    I/O 瓶颈:通过 sys.dm_io_virtual_file_stats 发现数据文件读写延迟高。

  3. 维护成本
    索引维护时间:重建索引耗时过长(如 >1小时),影响业务可用性。
    备份/恢复时间:单表过大导致备份窗口无法接受。

分表策略选择

  1. 水平分表(按行拆分)
    适用场景:数据按时间、地域、哈希等逻辑可分割。
    实现方式:
    按时间分表:Order_2023、Order_2024。
    按哈希分表:对主键哈希取模,分散到多个表
-- 创建分表(按年份)
CREATE TABLE Orders_2023 (OrderID INT PRIMARY KEY,OrderDate DATETIME,CustomerID INT,...
) ON FileGroup2023;CREATE TABLE Orders_2024 (OrderID INT PRIMARY KEY,OrderDate DATETIME,CustomerID INT,...
) ON FileGroup2024;-- 使用视图统一访问
CREATE VIEW AllOrders AS
SELECT * FROM Orders_2023
UNION ALL
SELECT * FROM Orders_2024;
  1. 垂直分表(按列拆分)
    适用场景:表包含大量不常访问的列(如 BLOB 字段)。
    实现方式:
    将高频访问列(如 ID, Name)拆分到主表。
    低频列(如 Description, Logs)拆分到扩展表
-- 主表(高频字段)
CREATE TABLE Users (UserID INT PRIMARY KEY,UserName VARCHAR(50),Email VARCHAR(100)
);-- 扩展表(低频字段)
CREATE TABLE UserDetails (UserID INT PRIMARY KEY,Address NVARCHAR(200),ProfileText TEXT,FOREIGN KEY (UserID) REFERENCES Users(UserID)
);

分表后的优化建议

  1. 分区方案(Partitioning)
    使用 SQL Server 内置分区功能,按范围或列表分区,避免手动分表。
    支持跨分区查询,简化管理。
    应用层路由
    在应用代码中根据分表键(如时间、用户ID)路由到具体表。
    统一查询接口
    使用视图或存储过程封装分表细节,对上层透明

在这里插入图片描述

相关文章:

Sql Server 索引性能优化 分析以及分表

定位需优化语句 根据工具 skywking 或者开启慢查询日志 找到 慢sql 的语句根据 执行过程 来 判断 慢的原因 row filter 指标 看查了多少数据 比例多少 type 看下是单表 还是 join联表 比如 执行步骤多 没索引 优化方向 减少执行次数索引 没索引考虑加索引 加索引 尽量选择 i…...

Vue.js 模板语法全解析:从基础到实战应用

引言 在 Vue.js 的开发体系中&#xff0c;模板语法是构建用户界面的核心要素&#xff0c;它让开发者能够高效地将数据与 DOM 进行绑定&#xff0c;实现动态交互效果。通过对《Vue.js 快速入门实战》中关于 Vue 项目部署章节&#xff08;实际围绕 Vue 模板语法展开&#xff09;…...

【JVM】内存区域划分,类加载机制和垃圾回收机制

本篇内容为了解 JVM 的内存区域划分&#xff0c;类加载机制&#xff0c;垃圾回收机制。实际开发中几乎用不到&#xff0c;但为了某些情况我们又不得不了解。 目录 一、JVM中的内存区域划分 1.1 内存区域划分考点 二、JVM的类加载机制 2.1 类加载流程 2.2 类加载什么时候会…...

代码随想录算法训练营第十四天|替换数字

文档讲解&#xff1a;代码随想录 难度&#xff1a;easy 附&#xff1a;冲 passion&#xff01;&#xff01;&#xff01;passion&#xff01;&#xff01;&#xff01;passion&#xff01;&#xff01;&#xff01; 替换数字 卡码网题目链接(opens new window) 给定一个字符串…...

Java实体类(Javabean)-编程规范

Java学习笔记-Java实体类详解 今天我们要聊一个看似简单却至关重要的知识点——Java实体类。就像快递小哥打包物件需要包装盒一样&#xff0c;在Java世界里处理数据也需要专门的容器&#xff0c;这就是我们的实体类&#xff01; 一、实体类是什么&#xff1f;——程序的"…...

深入解析 Java Stream API:筛选子节点的优雅实现!!!

&#x1f680; 深入解析 Java Stream API&#xff1a;筛选子节点的优雅实现 &#x1f527; 大家好&#xff01;&#x1f44b; 今天我们来聊聊 Java 8 中一个非常常见的操作&#xff1a;使用 Stream API 从 Map 中筛选出特定条件的元素。&#x1f389; 具体来说&#xff0c;我们…...

Vala编程语言教程-面向对象编程语基础

基础 尽管Vala语言并不强制你使用对象进行编程&#xff0c;但有些功能只能通过对象的方式来实现。因此&#xff0c;在大多数情况下&#xff0c;你肯定会希望采用面向对象的编程风格。与大多数当前的编程语言一样&#xff0c;为了定义你自己的对象类型&#xff0c;你需要编写一个…...

写读后感的时候,可以适当地引用书中的内容吗?

写读后感时&#xff0c;适当地引用书中的内容是可以的&#xff0c;这样可以更好地支持你的观点和感受&#xff0c;增强文章的可信度和说服力。 引用书中的内容可以帮助读者更好地理解你所讨论的主题和人物&#xff0c;同时也可以展示你对原著的深入理解和阅读能力。但是&#…...

计算机网络高频(二)TCP/IP基础

计算机网络高频(二)TCP/IP基础 1.什么是TCP/IP⭐⭐ TCP/IP是一种网络通信协议,它是互联网中最常用的协议之一。TCP/IP有两个基本的协议:TCP(传输控制协议)和IP(互联网协议)。 TCP(Transmission Control Protocol,传输控制协议)是一种可靠的、面向连接的协议。它负…...

蓝桥杯 之 数论

文章目录 习题质数找素数 LCM报数游戏 快速幂数字诗意 组合数与错位排序小蓝与钥匙 同余取模 数论&#xff0c;就是一些数学问题&#xff0c;蓝桥杯十分喜欢考察&#xff0c;常见的数论的问题有&#xff1a;取模&#xff0c;同余&#xff0c;大整数分解&#xff0c;素数&#x…...

无法写入文件:(FileSystemError): Error: EPERM: operation not permitted, open...)

问题分析&#xff1a; 当我想在Visual Studio Code中编写文件时&#xff0c;出现无法写入文件的错误&#xff0c;发现是权限的问题 解决办法&#xff1a; 右键应用图标 → 以管理员身份运行就可以了...

Java爬虫抓取B站视频信息

依赖 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.17.2</version> <!-- 最新版可去官网查看 --></dependency>编码 public static List<VideoDto> parseSearchPage(Str…...

Sql Server数据迁移易错的地方

背景&#xff1a;之前一直台式机&#xff0c;毕业准备答辩了&#xff0c;要将代码搬到笔记本运行才方便些。这个Sql数据弄过来搞了好几个小时 还原备份报错&#xff1a;媒体簇的结构不正确。SQL Server 无法处理此媒体簇。 解决&#xff1a;升级到sql server版本比备份的那个高…...

七、服务器远程桌面报错

&#x1f33b;&#x1f33b;目录&#x1f33b;&#x1f33b; 一、远程桌面报错-用户账户限制&#xff08;例如&#xff0c;时间限制&#xff09;会阻止你登录。 一、远程桌面报错-用户账户限制&#xff08;例如&#xff0c;时间限制&#xff09;会阻止你登录。 原因是被远程的系…...

JAVA 之「优先队列」:大顶堆与小顶堆的实现与应用

Java 优先队列&#xff1a;大顶堆与小顶堆的实现与应用 文章目录 Java 优先队列&#xff1a;大顶堆与小顶堆的实现与应用一、什么是优先队列和堆&#xff1f;1. 优先队列2. 堆 二、Java PriorityQueue 基本用法1. 默认小顶堆示例代码输出 2. 实现大顶堆示例代码输出 三、大顶堆…...

压缩壳学习

壳是什么 壳就是软件的一个保护套&#xff0c;防止软件被进行反编译或被轻易地修改。 其作用就是为了保护软件。 常见的大类壳有压缩壳、加密壳、VM 壳的分类。 压缩壳顾名思义就是用来减小软件的文件大小的&#xff1b;加密壳&#xff0c;通过加密软件来保护软件&#xff…...

VRRP配置双出口ipsec隧道建立。

背景&#xff1a;在做毕设时&#xff0c;发现规划的不是那么合理&#xff0c;vrrp主备切换后&#xff0c;ipsec隧道并没有跟着切换到与备防火墙建立隧道&#xff0c;这是因为配置了双出口&#xff0c;路由的设计导致vrrp主备切换ipsec隧道没有跟着切换。 fw1为主&#xff0c;fw…...

机器学习——Numpy的神奇索引与布尔索引

在 NumPy 中&#xff0c;神奇索引&#xff08;Fancy Indexing&#xff09; 和 布尔索引&#xff08;Boolean Indexing&#xff09; 是两种强大的索引方式&#xff0c;用于从数组中提取特定元素或子集。以下是它们的详细说明和示例&#xff1a; 1. 神奇索引&#xff08;Fancy In…...

Linux:进程间通信

文章目录 前言一、进程间通信介绍1.1 进程间通信的目的1.2 进程间通信的发展与分类 二、管道2.1 匿名管道原理2.2 通信管道会出现的情况和特性&#xff08;重要&#xff09;2.3 命名管道2.3.1 命名管道与匿名管道的区别 三、system V3.1 共享内存原理3.2 键值3.2.1 键值生成原理…...

Mysql配套测试之查询篇

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 条件查询简单测试&#xff1a; 1.查询英语成绩不及格的同学(<60) 2…...

基于SSM框架的汽车租赁平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;汽车租赁平台当然不能排除在外。汽车租赁平台是在实际应用和软件工程的开发原理之上&#xff0c;运用Java语言以及SSM框架进行开发&#x…...

常考计算机操作系统面试习题(三下)

20. 请求页式存储管理系统缺页率计算 题目&#xff1a; 假设一个作业的页面走向为 1、2、3、4、1、2、5、1、2、3、4、5&#xff0c;当分配给该作业的物理块数分别为 3 和 4 时&#xff0c;计算采用下述页面置换算法的缺页率&#xff1a; (1) 先进先出&#xff08;FIFO&…...

Spring IOC核心详解:掌握控制反转与依赖注入

文章目录 前言一、IOC核心思想二、IOC容器实现1.核心接口&#xff1a;2.XML配置范例 三、Bean管理实践1.创建对象&#xff08;1&#xff09;基于xml方式创建对象&#xff08;2&#xff09;用注解的方式创建对象 2.依赖注入&#xff08;1&#xff09;基于xml方式注入属性基础类型…...

Servlet、HttpServletRequest、HttpServletResponse、静态与动态网页、jsp、重定向与转发

DAY15.2 Java核心基础 JavaWeb 要想通过浏览器或者客户端来访问java程序&#xff0c;必须通过Servlet来处理 没有Servlet&#xff0c;java是无法处理web请求的 Web交互&#xff1a; 接收请求HttpServletRequest&#xff1a;可以获取到请求的信息&#xff0c;比如uri&#…...

Linux 内核源码阅读——ipv4

Linux 内核源码阅读——ipv4 综述 在 Linux 内核中&#xff0c;IPv4 协议的实现主要分布在 net/ipv4/ 目录下。以下是一些关键的源文件及其作用&#xff1a; 1. 协议栈核心 net/ipv4/ip_input.c&#xff1a;处理接收到的 IPv4 数据包&#xff08;输入路径&#xff09;。net…...

组合总和 II:去重逻辑深度解析

组合总和 II&#xff1a;去重逻辑深度解析 在算法中&#xff0c;解决“组合总和 II”这类问题时&#xff0c;去重往往是最具挑战性的一环。如何避免重复组合&#xff0c;同时保证所有组合的唯一性&#xff0c;是实现高效算法的关键。今天&#xff0c;我们就来深度解析组合总和…...

蓝桥杯备考:二分答案之路标设置

最大距离&#xff0c;找最小空旷指数值&#xff0c;我们是很容易想到用二分的&#xff0c;我们再看看这个答案有没有二段性 是有这么个二段性的&#xff0c;我们只要二分就行了&#xff0c;但是二分的check函数是有点不好想的&#xff0c;我们枚举空旷值的时候&#xff0c;为了…...

[HY000][1366] Incorrect string value: ‘张三‘ for column ‘name‘ at row 1

常见原因 字符集不兼容 插入的数据包含当前字符集&#xff08;如 latin1&#xff09;不支持的特殊字符&#xff08;如中文、Emoji 等&#xff09;。 表、列或连接的字符集未正确配置为支持目标字符&#xff08;如未使用 utf8mb4&#xff09;。 客户端/服务端编码不一致 客户…...

什么是C++对象之间的view proxies

在C中&#xff0c;view proxies 是一种轻量级的对象&#xff0c;用于提供对另一个对象的间接访问或视图&#xff0c;而不直接拥有或管理该对象的数据。它们通常用于简化对复杂数据结构的访问&#xff0c;或在不需要复制数据的情况下提供特定的视图。 1. View Proxies 的核心概…...

MyBatis参数赋值技巧:#{} 和 ${} 的区别与实践

目录 一、前言二、 #{} 和${} 的使用方法和区别2.1 #{}使用方法2.2 ${}使用方法2.3#{} 和 ${} 的主要区别2.4使用建议 三、总结 一、前言 在 MyBatis 中&#xff0c;#{} 和 ${} 都用于在 SQL 语句中绑定参数&#xff0c;但它们在具体实现和安全性方面有所不同。理解它们的区别…...

5-1 使用ECharts将MySQL数据库中的数据可视化

方法一&#xff1a;使用Python Flask框架搭建API 对于技术小白来说&#xff0c;使用ECharts将MySQL数据库中的数据可视化需要分步骤完成。以下是详细的实现流程&#xff1a; 一、技术架构‌ 后端服务‌&#xff1a;使用Python Flask框架搭建API&#xff08;简单易学&#xff…...

协程的调度的对称与非对称

下图表示的就是对称协程&#xff0c;进入到该协程之后只能有一个操作就是yield&#xff0c;把cpu让回给调度器; 下图表示非对称协议&#xff0c;可以有两个操作&#xff0c;就是resume和yield&#xff0c;从哪里resume的&#xff0c;yield就会回到该位子&#xff1b;...

C# 中比较实用的关键字,基础高频面试题!

前言 在C#编程中关键字是构建逻辑和实现功能的基石&#xff0c;它承载着编程语言的语法规则和编程智慧。熟练掌握这些基础高频关键字对提升编程能力和面试表现至关重要&#xff0c;它们是日常开发和解决复杂问题的关键。 DotNetGuide 全面的C#/.NET/.NET Core学习、工作、面试指…...

文献分享: XTR——优化Token级检索的高效多向量模型

原文章 文章目录 1. XTR \textbf{1. XTR} 1. XTR原理 1.1. \textbf{1.1. } 1.1. 导论 1.2. XTR \textbf{1.2. XTR} 1.2. XTR的训练和推理 2. \textbf{2. } 2. 实验与分析 2.1. \textbf{2.1. } 2.1. 实验配置与结果 2.2. \textbf{2.2. } 2.2. 结果分析 3. \textbf{3. } 3. 其它分…...

【数据结构】C语言实现树和森林的遍历

C语言实现树和森林的遍历 导读一、树的遍历二、森林的遍历2.1 为什么森林没有后序遍历?2.2 森林中存不存在层序遍历?三、C语言实现3.1 准备工作3.2 数据结构的选择3.3 树与森林的创建3.4 树与森林的遍历3.4.1 先根遍历3.4.2 后根遍历3.4.3 森林的遍历3.5 树与森林的销毁3.6 算…...

《Python深度学习》第七讲:生成式深度学习

在深度学习的世界里,生成式模型是一种非常有趣且富有创造力的技术。它们能够生成全新的内容,比如文本、图像、音乐等,甚至可以创造出从未见过的虚拟世界。这一讲,我们将深入探讨生成式深度学习的核心技术,包括 LSTM 文本生成、DeepDream、神经风格迁移、变分自编码器(VAE…...

Spring的IOC

在现代 Java 开发中&#xff0c;Spring 框架几乎无处不在&#xff0c;特别是其核心的 IOC&#xff08;Inversion of Control&#xff09; 容器&#xff0c;几乎所有Spring的功能都与它紧密相关。 一、什么是IOC IOC&#xff0c;全称为 Inversion of Control&#xff08;控制反…...

常考计算机操作系统面试习题(四)

目录 1. Peterson 算法伪代码 2. 信号量生产者消费者问题分析 3. 注释 Peterson 主函数并分析输出结果 4. 用 fork 创建子进程的程序 1. Peterson 算法伪代码 题目&#xff1a; 写出 Peterson 算法的伪代码。 参考答案&#xff1a; // 定义变量 boolean flag[2]; //…...

Visual Studio Code 连接 SAP ERP 系统

首先确保服务打开 在vscode&#xff0c;在extension安装ABAP remote filesystem&#xff0c;然后打开设置SAP 系统的地址配置 CtrlshiftP 执行代码&#xff1a;AbapFS connect to an ABAP system&#xff0c;可以根据要求一步一步配置。 根据配置。加载系统 也可以直接在extens…...

从报错到成功:Mermaid 流程图语法避坑指南✨

&#x1f680; 从报错到成功&#xff1a;Mermaid 流程图语法避坑指南 &#x1f680; &#x1f6a8; 问题背景 在开发文档或技术博客中&#xff0c;我们经常使用 Mermaid 流程图 来可视化代码逻辑。但最近我在尝试绘制一个 Java Stream 转换流程图时&#xff0c;遭遇了以下报错…...

TDengine 中的 show 命令

简介 SHOW 命令可以用来获取简要的系统信息。若想获取系统中详细的各种元数据、系统信息和状态&#xff0c;请使用 select 语句查询 INFORMATION_SCHEMA 数据库中的表, 详见 元数据查询 SHOW APPS SHOW APPS;显示接入集群的应用&#xff08;客户端&#xff09;信息。 SHOW …...

博弈论中的均衡精炼:完美贝叶斯均衡、序贯均衡与颤抖手均衡详解

博弈论中的均衡精炼&#xff1a;完美贝叶斯均衡、序贯均衡与颤抖手均衡详解 1. 引言&#xff1a;为什么需要均衡精炼&#xff1f; 在博弈论中&#xff0c;纳什均衡是分析策略互动的核心工具&#xff0c;但其存在一个显著缺陷&#xff1a;无法排除不合理的均衡。例如&#xff0…...

github代理 | 快速clone项目

代理网址&#xff1a; https://ghproxy.com/ https://ghproxy.com/代理网址&#xff1a; https://ghproxy.com/ 比如需要克隆的项目git地址为&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui.git git clone https://ghproxy.com/https://github.com/AUTO…...

C语言基础与进阶学习指南(附运行效果图及术语解析)

C语言基础与进阶学习指南&#xff08;附运行效果图及术语解析&#xff09; 目录 C语言标准与编译流程CPU与内存基础C语言基础语法数据类型详解变量与内存管理运算符与表达式输入输出函数函数与内存管理指针与内存操作结构体与高级应用 1. C语言标准与编译流程 1.1 C语言标准演…...

【Scrapy】Scrapy教程8——处理子链接

通过前面几篇文章,已经了解了如何去爬取网页内容并存储到数据库,但是目前只是存储了一个页面的内容,现在想要获取每篇文章链接内的文章内容,我们来看看怎么获取。 生成新请求 首先我们肯定要先拿到链接,所以第一步都获取文章标题和链接肯定少不了,然后再爬取获取到到子…...

Python推导式深入解析

引言 Python 以其简洁、高效的语法而备受开发者喜爱&#xff0c;其中推导式&#xff08;Comprehensions&#xff09;更是 Python 语法的一大特色。推导式提供了一种简洁明了的方式来创建列表、集合和字典等数据结构&#xff0c;让代码更加紧凑和易读。本文将深入探讨 Python 推…...

在 macOS 上配置 SSH 连接 GitHub

在 macOS 上使用 SSH 连接 GitHub&#xff0c;可以免去每次使用 Git 时输入密码的麻烦&#xff0c;提高开发效率。本文将介绍如何在 macOS 上生成 SSH 密钥并配置 GitHub 进行身份认证。 1. 检查是否已有 SSH 密钥 在终端运行以下命令&#xff0c;检查是否已有 SSH 密钥&#…...

常考计算机操作系统面试习题(二)(中)

目录 24. 操作系统的主要功能有哪些&#xff1f; 25. 文件的属性主要有哪些&#xff1f; 26. 对文件的基本操作主要有哪些&#xff1f; 27. 目录的基本操作有哪些&#xff1f; 28. 目录的逻辑结构有哪些种&#xff1f; 29. 简述银行家算法的Available、Max、Allocation、…...

手机录视频风噪太大?华为Pura X“AI降风噪“太硬核了

你是否也在用手机录像时&#xff0c;比如大海海浪、阅览群山、空旷的原野的时候&#xff0c;呼啸的风总是能沦为刺耳的噪音&#xff0c;让精心构思的镜头&#xff0c;最后因为呼啸的风声最终成为“灾难现场”。传统的解决方式往往陷入两难&#xff1a;物理防风罩影响收音指向性…...

React 事件处理

1. React 事件处理的基本概念 React 事件处理的特点&#xff1a; 驼峰命名法&#xff1a;事件名采用驼峰命名法&#xff0c;如 onClick、onChange。JSX 语法&#xff1a;事件处理函数通过 JSX 传递给元素&#xff0c;如 <button onClick{handleClick}>。合成事件&#…...