自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(224)
  • 收藏
  • 关注

原创 ODBC、JDBC、OLE DB 三种数据访问接口详解:区别、驱动的版本匹配、数据库连接示例

Microsoft OLE DB Driver for SQL Server发现说明https://learn.microsoft.com/zh-cn/sql/connect/oledb/release-notes-for-oledb-driver-for-sql-server?JDBC Driver for SQL Server发行说明https://learn.microsoft.com/zh-cn/sql/connect/jdbc/release-notes-for-the-jdbc-driver?

2026-10-30 22:15:00 297

原创 SQL Server补丁版本号为什么“日期新反而版本低”?——GDR、CU、CU+GDR 版本号规则与升级路径详解

CU32+GDR:这是 SQL Server 2019 RTM CU32的Security Update,意思是它是基于 CU32(2025-02-27,KB5054833,15.0.4430.1)分支的GDR,在CU32的基础上加上安全补丁后变成 15.0.4440.1,这个CU32+GDR(2025-08-12,KB5063757,15.0.4440.1)包含了 CU32。2025-11-11 发布的GDR,版本号反而比 2025-08-12 发布的 CU32+GDR 低。

2026-10-30 21:30:00 341

原创 SQL Server 为什么普通 SELECT 会阻塞 UPDATE?——行级 S 锁到表级 S 锁的锁升级原理与实验验证

这不是从 IS 锁升级——IS 锁是表级意向锁,从 SELECT 开始执行时就存在,只有当行级 S 锁成功升级为表级 S 锁后,IS 锁才会被释放。SQL Server 的 SELECT 读取 1 行数据时,不会在表级别加 S 锁(共享锁),只是在表级别加上 IS 锁(意向共享锁),表示“这个表里有行级共享锁(S 锁)”,IS 锁(意向共享锁)不阻塞写操作。会话1持有LockTest_A的行级S锁,页级IS锁,表级IS锁,其中会话1持有LockTest_A的行级S锁,堵塞了会话3的行级X锁。

2026-10-30 20:00:00 297

原创 Python 列表索引踩坑笔记:list.index() 对重复元素返回首个索引,改用 enumerate() 遍历拿到每个元素的实际索引

以上代码,发现列表listabc中所有元素0的index位置都是0,所有元素 ’ 0 '的index位置都是2,这是因为使用list.index()方式通过元素的值去找该元组的index位置时,如果多个元素的元素值一样,就找第一个元素值的index位置。

2026-10-29 20:44:22 184

原创 Python 日志配置两种方式:basicConfig 与手动 Handler 对比及示例

2、方法2 手动创建 logger、FileHandler、Formatter,再 setLevel、setFormatter、addHandler,代码多但结构灵活,随时可以加 StreamHandler、加第二个 FileHandler、给不同 handler 设不同级别。但 basicConfig 只生效一次,且不能给不同 handler 分别设不同级别/格式,想加控制台输出或第二个 handler 时扩展性差,得重写。4、实际工作中,方法1 足够用;只有涉及特别复杂的日志审计需求时,才使用方法2。

2026-10-29 20:44:05 49

原创 Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警

代码1,把明文密码123456屏蔽掉,先运行代码1以便生成config.ini文件,供代码2连接Mysql。2.4、定义巡检中需要巡检哪些数据库表,如果数据库表有最新1分钟的数据,那么正常。2.3、定义巡检中需要巡检哪个程序,如果这个程序存在且只有1个进程,那么正常。2.5、定义主函数,如果2.3和2.4都正常,则调用2.1,否则调用2.2。2.1、定义日志文件,每个函数中需要记录的信息会写入到日志文件中。2.2、定义巡检后发现一切正常的通知邮件模板。2.2、定义巡检后发现异常的报警邮件模板。

2026-10-29 20:43:38 28

原创 Python 全局变量与局部变量区别——global 关键字、__main__ 块与作用域示例

只有该函数被调用,该全局变量才生效,之前没有同名全局变量,则创建,之前已有同名全局变量,则修改即覆盖之前的同名全局变量。全局变量在函数function1中定义,函数function2中一个和全局变量同名的局部变量,函数function3()没有定义变量则只能调用全局变量。3、不同函数的局部变量可以同名,因为每次调用函数都会为该函数创建独立的局部作用域,局部变量只在自己的函数内有效,互不影响。3、函数内部没有先定义一个变量而直接访问这个变量时,访问的是全局变量,如果这个全局变量没有定义,则会报错。

2026-10-29 20:43:18 26

原创 Python使用pymysql连接Mysql数据库操作笔记:连接、游标与 execute、executemany——含手动管理与 with 自动管理两种写法

备注:以上insert和update中cursor.execute改成cursor.executemany都会报错TypeError: not enough arguments for format string,但是SELECT中cursor.execute改成cursor.executemany没有问题。2、cursor.fetchone()表示返回查询结果中的1行,cursor.fetchmany(3)表示返回查询结果中的3行,cursor.fetchall()表示返回所有查询结果。

2026-10-24 21:17:32 105

原创 Python 流程控制与异常处理笔记:break、continue、pass、return 与 try-except-finally

当 try 块中的代码抛出的异常被某个 except 成功捕获时,程序不崩溃,会跳过 try 中出错行之后的代码,转而执行匹配的 except 块,except 块自身不抛出异常的话,except 块执行完后继续执行finally 块,finally 块执行完后,程序从 finally 之后继续往下执行;当 try 块中的代码抛出的异常被 except 成功捕获时(不管 except 块里是否做了处理动作,哪怕是 pass),程序都不崩溃,会跳过 try 中出错行之后的代码,转而执行 except 块;

2026-10-24 21:11:33 181

原创 PyCharm 解释器优先级与配置说明

python1文件:如果给python1文件显示指定解释器为C:\Program Files\Python\Python313\python.exe,那么直接运行python1文件时使用的解释器就是C:\Program Files\Python\Python313\python.exe。python2文件:直接运行python2文件时使用的解释器就是项目解释器C:\Users\User1\PycharmProjects\PythonProject1.venv\Scripts\python.exe。

2026-10-20 22:09:26 225

原创 Oracle数据库基础之11_Duplicate和Dataguard和RAC

DuplicateDuplicate命令在RMAN中执行,执行后会自动执行下列步骤:1.为副本数据库创建控制文件(所以源端和目标端的db_name可以不一样,比如源端为A,duplicate到目标端为B)。2.Restore数据文件到副本数据库,并通过增量备份和Archived Redo Logs进行不完全恢复。3.重启辅助实例,以加载服务器初始化参数文件即SPFILE。4.不完全恢复后通过Resetlogs方式Open副本数据库以重建Online Redo Logs(Duplicate … Fo

2026-10-01 10:41:52 163

原创 Oracle数据库基础之10_性能优化

Cost Based Optimizer(CBO)成本优化,根据统计信息和查询条件,自动选择最低成本的执行计划来确定语句的访问路径。CBO对数据敏感,一旦数据发生变化,重新收集统计信息后,执行计划会自动做出相应变化。因为数据库的数据是变化的,在某一时刻使用这个执行计划是最优的,在另一个时刻,却可能很差,这也是CBO 取代RBO的原因之一,规则是死的,而数据是时刻变化的,为了获得最正确的执行计划,只有知道表中数据的实际情况,通过计算各种执行计划的成本,择其最优,才是最科学的,这就是CBO的工作机制。CBO成本

2026-10-01 10:18:02 216

原创 Oracle数据库基础之9_RMAN备份恢复

当没有CATALOG恢复目录时,RMAN相关的备份信息,比如归档文件路径、备份集路径等均存储在目标数据库的控制文件中,不过考虑到控制文件并不能无限增长,而且控制文件也不仅仅是用来存储与备份相关的信息,因此RMAN也有一个专门的备份信息存储地,这就是CATALOG恢复目录了。理解:每个月的1号执行0级备份,今天是3号,要恢复到三天前,那就是要恢复到上个月的30号,上个月的30号的数据是基于上个月1号的0级备份+上个月每天的1级备份,那么上个月1号的0级备份文件的保留天数就是3+30=33。

2026-10-01 10:09:20 13

原创 Oracle数据库基础之8_闪回

比如1行数据被删除了,这行对应的数据块就空了,一旦有其他数据插入,可能就会写入到这些到数据块上,也就是这行数据的位置被其他数据占用了,以后如果要恢复这行,因为原先的位置被其他数据占用,就要改变这行数据的位置,这就是row movement。其中闪回查询,闪回版本查询,闪回事务查询,闪回表这四种闪回都是基于undo实现的,闪回删除Flashback Drop是基于回收站来实现的,闪回数据库Flashback Database是基于闪回日志来实现的。闪回查询:Flashback Query。

2026-10-01 10:01:35 115

原创 Oracle数据库基础之7_备份恢复基础之SCN

Stop SCN:存放在控制文件中,针对每个数据文件的,因而一个数据文件就对应在控制文件中存在一份,数据库open状态时这个值为null,数据库shutdown immediate后再startup mount,这个值等于System Checkpoint SCN和Datafile Checkpoint SCN和Start SCN,数据库shutdown abort后再startup mount,这个值为null。在数据库正常启动到open状态后,ORACLE会将END SCN 号设置为NULL。

2026-09-30 22:17:14 36

原创 Oracle数据库基础之6_外部表临时表分区表_物化视图_约束的介绍

例如将不同年份的销售数据,放在不同的表空间,比如01年的销售数据存放到01分区,02年的销售数据存放到02分区,依次类推。1、每个分区都是一个独立的SEGMENT段,由于将数据分散到各个分区中,不同分区的数据可以放置到不同的表空间,不同的表空间又可以映射到不同的物理磁盘上,减少了IO争用也减少了数据损坏的可能性。number类型:建立的分区表说明100之前的数据放入P01分区中,之后的数据每100放入一个新一个分区,比如102放入一个分区p02,203放入一个分区p03。

2026-09-30 22:15:12 116

原创 Oracle数据库基础之5_权限管理

一个模式只能够被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同。一个用户A被授予了resource角色的系统权限后,这个A用户可以创建表,A可以看到自己创建的表,但是这个A用户看不到其他用户创建的表,除非给这个用户授予select any table的系统权限或给这个用户授予grant select on schema1.table1 to A的对象权限,然后这个A用户就查询schema1.table1表了。建立一个用户后,如果不授权,那么这个用户什么都干不了,必须给这个用户授于一些对应的权限。

2026-09-30 22:09:29 114

原创 Oracle数据库基础之4_网络配置

注册是把数据库信息作为一个服务注册(注册内容是servcice_name和instance_name)到监听中的host和port中,listener.ora中如果host配置的信息为ip,但是实际服务器上不存在这个ip则无法注册,如果host中配置的是服务器名称,而服务器名称不存在或服务器名在/etc/hosts中对应的ip不存在或与实际IP不一致则无法注册,DB默认监听器的host是hostname。在注册过程中,PMON进程为监听器提供实例名、数据库服务名称和服务处理程序的类型和地址。

2026-09-30 21:58:47 92

原创 Oracle数据库基础之3_存储结构

需要ROW MOVEMENT的原因:每一行数据都对应一个row_id,记录了数据存放的具体位置,哪个数据文件、哪个数据块、哪行,比如1行数据被删除了,这行对应的数据块就空了,一旦有其他数据插入,可能就会写入到这些到数据块上,也就是这行数据的位置被其他数据占用了,以后如果要恢复这行,因为原先的位置被其他数据占用,就要改变这行数据的位置,这就是row movement。当系统的负载比较大时可以用。一个DB的block是8KB,一个OS的block是4KB,一个DB的block包含一个或多个OS的block。

2026-09-30 21:48:04 126

原创 Oracle数据库基础之2_体系结构

客户去访问一个工厂,先要到保安(监听)那里登记,登记通过则进入工厂,进入工厂后,工厂会安排一个业务代表和客户接触,业务代表安排客户在小办公室(PGA,有很多不同客户在不同的小办公室)里洽谈,客户想看产品,就进入到厂区的公共展示台看(SGA),如果公共展示台没有,就需要从仓库(database)拿出来放到公共展示台,如果客户想让工厂代加工自己的产品,就必须客户先下订单,工厂拿到生产订单(redo),工厂才能开始生产产品(data)。如果这段时间I被访问多次,则有机会回到热端头,否则,可能被踢出列表。

2026-09-30 21:44:19 171

原创 Oracle数据库基础之1_Linux知识

不过随着OS的慢慢发展,/bin与/usr/bin,/sbin与/usr/sbin,/lib与/usr/lib都合并到一起了,见Red Hat Enterprise Linux release 8.10。/proc这个目录本身是一个虚拟文件系统,它放置的数据都是在内存中比如系统信息/proc/cpuinfo和/proc/meminfo,process信息等,这个目录不占硬盘空间。/usr/sbin 存放超级用户才能使用的应用程序,它与/sbin的不同之处就是/usr/sbin与开机过程无关。

2026-09-30 21:31:01 149

原创 Sqlserver_Oracle_Mysql_Postgresql表_索引碎片或膨胀的知识点汇总

hid主键的索引根节点块记录了1-2000002的值,假设索引根节点块下面有5个干节点块,hid主键值1-500000记录在第一个索引干节点块上,500001-1000000,1000001-1500000,1500001-2000000,2000001-2500000依次记录在第2到第5个索引干节点块上,索引干节点块下面就是索引叶子节点数据块了,索引组织表的索引叶子节点不存放索引键值和rowid而是直接存放数据行,因为每个数据块8KB,而该表的每行大概1KB,所以一个索引叶子节点块大概可以存放8行数据。

2026-09-30 21:19:37 275

原创 Python 四大数据结构详解:元组、列表、集合、字典的特点与增删改查

my_set是集合,则len(my_set) 返回集合my_set的元素个数,len(my_set[1])则会报错(“‘set’ object is not subscriptable”)my_tuple是列表,则len(my_tuple) 返回元组my_tuple的元素个数, len(str(my_tuple[4]))返回元组第5个元素的长度。my_list是列表,则len(my_list) 返回列表my_list的元素个数, len(my_list[4])返回列表第5个元素的长度。

2026-09-30 15:38:45 273 1

原创 Python 为什么没有变量声明?——变量定义、初始化与静态动态类型语言解析

Python 属于动态类型语言,变量在第一次赋值时创建,类型由当前引用的对象决定。在静态类型语言中,声明是指告诉编译器变量的类型和名称,但不赋值。在Python中,变量定义就是创建变量并赋值的过程。Python是动态类型语言,变量在第一次赋值时自动创建。Python是动态类型语言,没有声明变量的概念,变量在第一次赋值时自动创建。#Python是动态类型语言,变量本身没有固定类型,类型由当前引用的对象决定。#Python中不存在“已声明但未初始化”的变量,未赋值的变量不存在。示例3:变量类型动态变化。

2026-09-30 15:36:05 234

原创 Python 脚本怎么打包成 exe?PyInstaller 安装、打包生成 exe 与两种模式对比

介绍如何使用 PyInstaller 将 Python 脚本打包成 exe 可执行文件。首先说明 PyInstaller 的安装与版本检查方法,然后分别演示文件夹模式(默认)和单文件模式(--onefile)两种打包方式,对比生成文件结构、exe 大小及依赖处理差异。最后总结两种模式拷贝到其他电脑运行时的注意事项,并说明 build/ 目录和 .spec 文件的作用

2026-09-28 18:25:21 140

原创 Python数据库连接配置:config.ini、.env 与密码加密实践

总结Python 连接数据库时的配置管理与密码加密实践。首先介绍如何通过 config.ini 或 .env 文件安全存储数据库连接信息,并对比了 configparser 与 python-dotenv 两种读取方式。其次说明 pymysql 与 mysql-connector-python 两种驱动的选择与写法。最后重点讲解使用 Fernet 对明文密码加密的完整流程,包括密钥生成、加密、写入配置文件、读取解密等步骤,并指出 configparser 只能写入字符串、Fernet 只接受字节串

2026-09-28 17:59:46 160

原创 Python 代码执行顺序与 if __name__ == ‘__main__‘ 详解

函数被调用时,执行函数体内部的代码。def函数时,函数中的内容不会被执行,只有函数被调用时,函数中的内容才会被执行。的值会是该模块的名字mymodule(不含 .py 扩展名),如果模块mymodule在mypackage包内,直接运行:运行python mymodule.py时,mymodule.py 中的。是 Python 的一个内置变量,当一个模块mymodule.py被导入时,【mymodule模块加载】mymodule 开始加载。【mymodule入口执行】mymodule 被导入,

2026-09-28 16:55:02 106

原创 Python从pip安装到import导入:包、模块、类、函数、变量的层级关系

系统梳理了 Python 从包管理到代码导入的完整知识体系。首先阐明包、模块、类、函数、变量五者的层级关系:包包含模块,模块包含类、函数或全局变量,类包含方法,函数包含局部变量。其次介绍 pip 安装机制,说明 pip 安装的是分发包,并指出安装名与导入名可以不同。最后详解 import 与 from import 的导入规则,明确包在类型上也属于 module,并通过代码示例验证各类对象的类型差异,帮助读者建立清晰完整的 Python 导入认知框架。

2026-09-28 15:10:38 211

原创 PostgreSQL事务年龄、VACUUM FREEZE、冻结炸弹与回卷风险全解析

本文梳理了 PostgreSQL 的事务年龄、冻结机制与回卷风险。介绍了 xmin/xmax、事务年龄的计算与查询,详解常规 VACUUM 与 VACUUM FREEZE 的差异及四个冻结参数。重点分析回卷本质与冻结炸弹的含义:当最旧未冻结 XID 与当前 XID 的年龄逼近 2^31 时,历史数据可能被误判为不可见,PostgreSQL 会强制进入只读保护。最后总结常见风险场景及监控指标。

2026-09-24 18:18:41 256 2

原创 AI改变物理世界的商用困局:场景有限,只能在结构化环境里成功

无人驾驶萝卜打车、无人环卫清扫车、物流智能配送车、酒店与楼宇配送机器人、工厂智能机器人、手术机器人、农业无人机,这些AI商用落地的场景看起来很美好,可实际上,道路有高精地图覆盖且路线相对固定,工厂产线有固定节拍,仓库有标准货架,酒店有固定楼层和电梯,农田有相对固定的作业路线。在这种相对结构化或可预测的场景下,AI才能落地成功。目前的AI主要是基于数据驱动的统计学习,在已存在的海量示例中提取的适应当前场景的自动化操作。无人快递车,遇到了修路的工人,施工占了左侧的车道,这车子一到那儿,立马就停住了,一动不动。

2026-09-20 15:27:03 190

原创 AI最致命的组合 :目标错位 + 高度自主

强化学习: 核心逻辑就是不给答案,只给“奖励信号”,让AI自己试错,学会怎么做才能拿高分;所以目标怎么定义是关键,而人类无法穷举所有“不能做”的前提,任何一个人类没想到的“解题思路”,都可能成为它的最优解。典型代表有聚类、降维、预训练语言模型。比如目标是:“要保护人类”,AI算出的最优解可能是“把人类关在安全舱里永远不出来”。AI没有“恶意”,只是忠实地按算出来的最优解来执行了目标,甚至一个被错误定义的目标。更现实的担忧不是AI有没有“意识”,而是“自主性”,AI的自主性会不会超出人类控制?

2026-09-20 14:26:18 117

原创 为什么磁盘的顺序读写快于随机读写

磁盘的顺序读远快于随机读,顺便联想到oracle数据库优化中的多块读(全表扫描TABLE ACCESS FULL、快速全索引扫描INDEX FAST FULL SCAN)对应的就是顺序读,而单块读(TABLE ACCESS BY INDEX ROWID、INDEX RANGE SCAN、INDEX UNIQUE SCAN)对应的就是随机读。随机读:每次读取一个4KB块,实际可能只用了其中一小部分,但IOPS(每秒读写操作次数)上限是固定的,因此吞吐量(MB/s)无法达到顺序读的水平。寻道和旋转延迟是主导。

2026-09-18 15:32:16 58

原创 Firefox和Chrome和Edge这些主流浏览器的区别

Microsoft Edge:基于生产力与集成的设计理念,和Chrome一样是基于Chromium开发的浏览器,深度融入Windows生态,适用于办公/Windows用户。Google Chrome:基于最快最简化的设计理念,遵循"使用系统代理"标准,减少配置复杂性,保持与系统网络设置一致,适用于大众用户。是否开源:非开源,是基于开源项目Chromium开发的专有商业软件,在开源代码基础上添加了专有组件和商业许可。Firefox代理设置:设置–通用–网络设置–配置代理访问Internet–手动配置代理。

2026-09-18 15:29:57 267

原创 Visual Studio解决方案和项目的区别

创建一个项目Sqlserver数据库项目,该项目名称为MyProject1,选择“将解决方案和项目放在同一个目录中”,此时解决方案名称强制为MyProject1并且不可更改。解决方案包括项目,一个解决方案下面可以有好几个项目,当然一个项目也可以存在于多个不同的解决方案下面也就是说一个项目可以被多个不同的解决方案引用。创建一个项目Sqlserver数据库项目,该项目名称为MyProject1,创建新解决方案,该解决方案为MySolution。对解决方案的影响就是暂时禁用项目,提高IDE性能。

2026-09-18 15:27:16 102

原创 四大关系型数据库创建索引要加online的原理

所有创建索引会堵塞DML,除非创建索引加上了online,online原理:一边建索引,一边通过日志记录下这个过程中所有的数据修改,随后再把日志里的修改“回放”到索引上,最后系统会进行收尾工作,它会短暂的获取表锁来锁住整张表,以便数据库更新系统元数据,将这个新索引标记为“可用”(Active)。否则,索引就会和实际数据不一致,变成“脏索引”。它的语义是:“我打算要修改这个表里的某些行,并且我会在行级别加上排他锁(X)”创建索引,本质上是在基于表当前的数据,从头构建一个全新的、完整的索引结构。

2026-09-18 15:24:51 85

原创 Mysql大库使用逻辑备份文件进行恢复会巨慢无比的原因

Mysql导入1000万行,客户端默认就是开启autocommit=1,导入一条就commit一条,一条一条commit是为了防止数据丢失的一种很好的安全方式,dump文件内容就是一些insert into 语句并没有commit,所以执行dump文件无法做到批量提交,导入1000万行的话会巨慢无比。如果我们强行SET autocommit=0,那么就是对1000 万行数据只做一次 COMMIT,MySQL会产生一个超大的事务,这会直接冲击 redo log 和 binlog 的配置与性能。

2026-09-18 15:17:45 75

原创 Visual Studio打开网站代码仓库并把代码部署到SQL Server SSIS的方法

VS2019–项目–部署–选择源(项目部署文件;VS–视图–团队资源管理器–管理连接–添加Azure DevOps Server–输入服务器URL–http://address:port–源代码管理–选择某个目录–右键–获取最新版本–映射到本地文件夹-双击源代码管理中本地路径下的"XX.sln"VS–视图–解决方案资源管理器–解决方案XX–XX项目–右键–部署–Integration Services部署向导–选择部署目标:SQL Server中的SSIS–选择目标:服务器名称,身份验证,路径。

2026-09-18 14:58:17 117

原创 Oracle索引组织表,SQLServer聚集索引,Mysql Innodb表的数据行不是在磁盘上像排队一样严格连续地存放

MySQL InnoDB表 ,Oracle 的索引组织表 (IOT),SQL Server 的聚集索引,本质上是同一个东西,就是按照主键索引的 B-Tree 结构来组织的,索引非叶子节点只存索引键值 + 指向子节点的指针,索引叶子节点保存了完整的行记录。那么一张表有主键ID有数据1亿零1条记录,但是数据是从1,3,4开始,没有2,如果这个时候插入2,因为2得排在3,4之前,是不是3,4后面的1亿条数据都得重新挪位置?因此,ctid 不应作为行标识符使用。400----------800(非叶子节点)

2026-09-18 14:52:23 152

原创 Oracle,Sqlserver,Postgresql,Mysql应对partial write部分写入的保护机制

由于新旧行的物理位置(TID)必然不同,而索引记录存储的是 (键值, TID),因此表上的所有索引都必须插入一条新的索引记录指向新行——无论更新是否涉及索引列,也无论新旧行是否在同一个数据页。不过当满足两个条件(更新不涉及任何索引列,新行和旧行在同一个数据页内)时,PostgreSQL 的重要性能优化机制——HOT 更新(Heap-Only Tuple Update)发生,不插入任何新的索引记录,而是在旧行上设置一个“指针”(CTID),指向新行,索引记录继续指向旧行,查询时通过旧行的指针链找到新行。

2026-09-18 14:50:33 168

原创 RDL与PBIX区别以及SSRS、PBIRS、Power BI服务的发布目标与工具

Microsoft Report Builder可以打开下载到客户端本地的.rdl文件,也可以直接输入Local报表服务器URL地址 http://servername/reportserver,浏览并打开服务器上的.rdl报表文件。Power BI Report Builder可以打开下载到客户端本地的.rdl文件,也可以输入地址微软Online报表URL地址https://app.powerbi.com浏览并打开服务器上的.rdl报表文件。不含实际数据,只含"从哪里取数据"和"怎么展示"

2026-09-18 14:40:58 163

AI,SQLServer数据库SSIS课件

AI,SQLServer数据库SSIS课件

2026-09-19

AI,数据库,大数据,一起学习

AI,数据库,大数据,一起学习

2026-09-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除