GreatSQL优化技巧:手动实现谓词下推

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

GreatSQL优化技巧:手动实现谓词下推

导语

最近总是听到用 AI 来优化 SQL 的言论,今天心血来潮试了一下,把表结构、统计信息、SQL语句、执行计划都告诉AI,AI给出了一大堆的建议,它会从索引,语句改写,参数调整各个方面给出优化策略,看似面面俱到,但是如果不懂优化理论,随便使用其给出的优化建议,可能的结果就是,一顿操作猛如虎,一看战绩零杠五。所以本人还是老老实实的总结优化技巧吧,这些案例技巧或许某天会成为 AI 的营养餐。

SQL 案例

SQL 案例语句:(实际业务场景太复杂,截取片段来说明本文主题)

SELECT ta.*, tb.*
  FROM (SELECT *
          FROM (SELECT a.contactid,
                       a.subs_number,
                       a.log_time,
                       ROW_NUMBER() OVER(PARTITION BY a.contactid, a.subs_number ORDER BY a.log_time DESC) rn,
                       a.log_id
                  FROM a
                 WHERE a.contactid IS NOT NULL
                   AND a.log_time >= '2025-05-30 00:00:00'
                   AND a.log_time <= '2025-06-02') cc
         WHERE rn = 1) ta
  LEFT JOIN (SELECT b.*,
                    ROW_NUMBER() OVER(PARTITION BY b.basesn ORDER BY b.create_time DESC) rn
               FROM b
              WHERE b.create_time IS NOT NULL) tb
    ON ta.contactid = tb.basesn
   AND tb.rn = 1

下面支撑该案例 SQL 的测试表结构,符合案例 SQL 特点的测试数据。

   CREATE TABLE a(log_id bigint,CONTACTID INT,subs_number INT,log_time datetime,PRIMARY KEY (log_id),KEY idx_logtime(log_time));
   CREATE TABLE b(id bigint PRIMARY KEY,basesn INT,create_time datetime,KEY idx_basesn(basesn));
   
   delimiter //
   
   CREATE OR REPLACE PROCEDURE P1() IS
   BEGIN
     FOR I IN 1 .. 10000 LOOP
        INSERT INTO a(log_id,contactid,subs_number,log_time) VALUES(i,TRUNC(rand()*8000),TRUNC(rand()*9000),SYSDATE-rand()*90);
     END LOOP;
     
     FOR I IN 1 .. 1000000 LOOP
        INSERT INTO b(id,basesn,create_time) VALUES(i,TRUNC(rand()*800000),SYSDATE-rand()*90);
     END LOOP;
   END;
   //
   delimiter ;

两表的统计信息如下:

greatsql> SHOW index FROM a;
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| a     |          0 | PRIMARY     |            1 | log_id      | A         |       10000 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| a     |          1 | idx_logtime |            1 | log_time    | A         |        9990 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
2 rows in set (0.00 sec)

greatsql> SHOW index FROM b;
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| b     |          0 | PRIMARY    |            1 | id          | A         |      916864 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| b     |          1 | idx_basesn |            1 | basesn      | A         |      515268 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
2 rows in set (0.00 sec)

语句分析

SQL有两个派生表ta,tb,这两表做left join 左外连接。派生表ta,作为左外连接的左表,内层表a有log_time过滤条件,该列有单列索引,查询两三天的数据数据量命中几百行,查询一个月左右的数据量命中几千到1万左右。派生表tb,作为左外连接的右表,内层表b全表百万级别的数据量,条件create_time is not null过滤性不好。两个派生表都使用了窗口函数ROW_NUMBER()

执行计划分析

语句实际执行计划如下:

EXPLAIN: -> Nested loop left join  (cost=22497.56 rows=0) (actual time=6181.328..6182.085 rows=331 loops=1)
    -> Filter: (cc.rn = 1)  (cost=1.21..35.91 rows=30) (actual time=2.712..2.794 rows=331 loops=1)
        -> Table scan on cc  (cost=2.50..2.50 rows=0) (actual time=2.704..2.752 rows=331 loops=1)
            -> Materialize  (cost=0.00..0.00 rows=0) (actual time=2.698..2.698 rows=331 loops=1)
                -> Window aggregate: row_number() OVER (PARTITION BY a.CONTACTID,a.subs_number ORDER BY a.log_time desc )   (actual time=2.189..2.323 rows=331 loops=1)
                    -> Sort: a.CONTACTID, a.subs_number, a.log_time DESC  (cost=149.21 rows=331) (actual time=2.168..2.190 rows=331 loops=1)
                        -> Filter: (a.CONTACTID is not null)  (cost=149.21 rows=331) (actual time=0.156..1.847 rows=331 loops=1)
                            -> Index range scan on a using idx_logtime over ('2025-05-30 00:00:00' <= log_time <= '2025-06-02 00:00:00'), with index condition: ((a.log_time >= TIMESTAMP'2025-05-30 00:00:00') and (a.log_time <= TIMESTAMP'2025-06-02 00:00:00'))  (cost=149.21 rows=331) (actual time=0.147..1.806 rows=331 loops=1)
    -> Index lookup on tb using <auto_key0> (basesn=cc.contactid, rn=1)  (cost=0.25..766.47 rows=3025) (actual time=18.668..18.668 rows=1 loops=331)
        -> Materialize  (cost=0.00..0.00 rows=0) (actual time=6178.570..6178.570 rows=1000000 loops=1)
            -> Window aggregate: row_number() OVER (PARTITION BY b.basesn ORDER BY b.create_time desc )   (actual time=2153.616..3469.381 rows=1000000 loops=1)
                -> Sort: b.basesn, b.create_time DESC  (cost=100382.85 rows=998296) (actual time=2153.598..2733.042 rows=1000000 loops=1)
                    -> Filter: (b.create_time is not null)  (cost=100382.85 rows=998296) (actual time=0.075..900.074 rows=1000000 loops=1)
                        -> Table scan on b  (cost=100382.85 rows=998296) (actual time=0.074..316.051 rows=1000000 loops=1)

1 row in set (6.22 sec)

两表ta,tb使用Nested loop方式进行连接,ta表作为外层驱动表,结果集rows为331。 tb表作为内层循环表,循环扫描331次,这些都消耗不多。

此SQL耗时多的步骤在对tb的内层表b进行排序(Sort),做窗口函数聚合计算(Window aggregate),再做物化处理(Materialize)这三个步骤了,对一百万的数据做这些处理耗时约6s,虽然只执行一次,但对SQL性能的影响是很大的。现在问题聚焦于能不能减少做这些处理的数据量。

从b表的统计信息看,关联字段basesn的选择性不错,本SQL最终结果集也只有331行,关联字段对b表的过滤条件是很好的,当前优化器的行为表现是,因为有窗口函数聚合运算,主查询的关联谓词条件无法推入到tb派生表的内部。了解了这一点,想办法改写语句,让关联字段起到过滤作用。

优化方案

这里我想到的解决方案是:对外层查询表的列CONTACTID去重处理,关联到tb内层查询中,对满足关联条件的数据做Sort,Window aggregate,Materialize这些处理。

为什么增加这一层关联与原语句等价呢,就当作思考题吧,可在评论区评论噢!

语句改写参考如下:

SELECT ta.*, tb.*
  FROM (SELECT *
          FROM (SELECT a.contactid,
                       a.subs_number,
                       a.log_time,
                       row_number() OVER(PARTITION BY a.contactid, a.subs_number ORDER BY a.log_time DESC) rn,
                       a.log_id
                  FROM a
                 WHERE a.contactid IS NOT NULL
                   AND a.log_time >= '2025-05-30 00:00:00'
                   AND a.log_time <= '2025-06-02') cc
         WHERE rn = 1) ta
  LEFT JOIN (SELECT b.*,
                    row_number() OVER(PARTITION BY b.basesn ORDER BY b.create_time DESC) rn
               FROM b
               join (SELECT distinct CONTACTID
                      FROM a
                     WHERE CONTACTID IS NOT NULL
                       AND LOG_TIME >= '2025-05-30 00:00:00'
                       AND LOG_TIME <= '2025-06-02') a1
                 ON a1.CONTACTID = b.basesn
              WHERE b.create_time IS NOT NULL) tb
    ON ta.contactid = tb.basesn
   AND tb.rn = 1

改写后的语句执行计划如下:

EXPLAIN: -> Nested loop left join  (cost=111.18 rows=0) (actual time=14.846..15.281 rows=331 loops=1)
    -> Filter: (cc.rn = 1)  (cost=1.21..35.91 rows=30) (actual time=2.668..2.747 rows=331 loops=1)
        -> Table scan on cc  (cost=2.50..2.50 rows=0) (actual time=2.636..2.683 rows=331 loops=1)
            -> Materialize  (cost=0.00..0.00 rows=0) (actual time=2.630..2.630 rows=331 loops=1)
                -> Window aggregate: row_number() OVER (PARTITION BY a.CONTACTID,a.subs_number ORDER BY a.log_time desc )   (actual time=2.214..2.356 rows=331 loops=1)
                    -> Sort: a.CONTACTID, a.subs_number, a.log_time DESC  (cost=149.21 rows=331) (actual time=2.173..2.198 rows=331 loops=1)
                        -> Filter: (a.CONTACTID is not null)  (cost=149.21 rows=331) (actual time=0.089..1.784 rows=331 loops=1)
                            -> Index range scan on a using idx_logtime over ('2025-05-30 00:00:00' <= log_time <= '2025-06-02 00:00:00'), with index condition: ((a.log_time >= TIMESTAMP'2025-05-30 00:00:00') and (a.log_time <= TIMESTAMP'2025-06-02 00:00:00'))  (cost=149.21 rows=331) (actual time=0.071..1.730 rows=331 loops=1)
    -> Index lookup on tb using <auto_key0> (basesn=cc.contactid, rn=1)  (cost=0.25..2.57 rows=10) (actual time=0.037..0.038 rows=1 loops=331)
        -> Materialize  (cost=0.00..0.00 rows=0) (actual time=12.159..12.159 rows=382 loops=1)
            -> Window aggregate: row_number() OVER (PARTITION BY b.basesn ORDER BY b.create_time desc )   (actual time=11.614..11.781 rows=382 loops=1)
                -> Sort: b.basesn, b.create_time DESC  (actual time=11.608..11.636 rows=382 loops=1)
                    -> Stream results  (cost=237.31 rows=518) (actual time=1.673..11.394 rows=382 loops=1)
                        -> Nested loop inner join  (cost=237.31 rows=518) (actual time=1.670..11.247 rows=382 loops=1)
                            -> Filter: (a1.CONTACTID is not null)  (cost=214.40..35.91 rows=297) (actual time=1.430..1.545 rows=321 loops=1)
                                -> Table scan on a1  (cost=215.02..221.21 rows=298) (actual time=1.429..1.502 rows=321 loops=1)
                                    -> Materialize  (cost=215.00..215.00 rows=298) (actual time=1.428..1.428 rows=321 loops=1)
                                        -> Table scan on <temporary>  (cost=179.02..185.21 rows=298) (actual time=1.303..1.349 rows=321 loops=1)
                                            -> Temporary table with deduplication  (cost=179.00..179.00 rows=298) (actual time=1.302..1.302 rows=321 loops=1)
                                                -> Filter: (a.CONTACTID is not null)  (cost=149.21 rows=298) (actual time=0.110..1.143 rows=331 loops=1)
                                                    -> Index range scan on a using idx_logtime over ('2025-05-30 00:00:00' <= log_time <= '2025-06-02 00:00:00'), with index condition: ((a.log_time >= TIMESTAMP'2025-05-30 00:00:00') and (a.log_time <= TIMESTAMP'2025-06-02 00:00:00'))  (cost=149.21 rows=331) (actual time=0.108..1.108 rows=331 loops=1)
                            -> Filter: (b.create_time is not null)  (cost=0.48 rows=2) (actual time=0.028..0.030 rows=1 loops=321)
                                -> Index lookup on b using idx_basesn (basesn=a1.CONTACTID)  (cost=0.48 rows=2) (actual time=0.027..0.029 rows=1 loops=321)

1 row in set (0.03 sec)

可以看出改写后的SQL耗时0.03s,比原来的6.2s,性能提升了约200倍。表面上SQL是比原来复杂了一点,但整体执行效率却得到了很大的提升。

总结

SQL优化的核心思想是减少I/O开销,无论什么优化技巧都是围绕这个主题,根据SQL具体情况演变出的形形色色的方法而已。万变不离其宗,本案例也是如此。

通过手动改写SQL,实现谓词下推,减少了内层表需要处理的数据量,从而提升了SQL性能。

当然,我们期待GreatSQL的优化器能在未来实现这一算法,自动实现谓词下推,不用改动SQL,即可高效执行SQL。

无论哪种数据库的优化器,都会或多或少存在一定缺陷,我们优化DBA需要做的就是,理解其缺陷,再利用现有资源,帮助其找到好的执行计划,来提升SQL性能。

FreeRTOS-Plus-CLI使用笔记 FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置 阅读详情

相关推荐

spring-ai 1.0.0 学习(四)——提示词管理

摘要:本文介绍Spring AI中提示词管理的最佳实践。首先展示基础样例,指出直接传递用户输入的局限性。随后分析优质提示词应包含系统消息、上下文信息、输出结构和问答样例四要素。文章详述两种实现方式:链式调用(使用ChatClient构建器)和传统对象创建方法。进阶部分涵盖核心接口(Prompt、Message等)、消息类型、模板渲染配置(支持自定义)及提示词工程技巧(如RAG、任务分解)。最后提及高级功能如少样本模板和提示词库。全文强调结构化提示词对提升AI输出质量的关键作用,并展示Spring AI的灵活

hzp的专栏 1365

GreatSQL优化技巧全解析:从硬件配置到查询优化,解锁数据库性能新高度

摘要:本文系统介绍了GreatSQL数据库性能优化的四大关键维度:1)硬件配置优化,包括CPU/内存选型、NVMe存储部署和网络调优;2)操作系统内核参数调优,如禁用SWAP和THP;3)MGR集群性能提升策略,涉及流控关闭、并行复制和大事务拆分;4)查询优化器特性应用,如谓词下推、索引合并和并行查询。通过某电商平台案例展示了综合优化后性能提升240%的实践效果,为高并发场景下的数据库调优提供了系统性解决方案。

2501_93525294的博客 672

Cesium实战:全球海洋动态水面与自定义区域波浪效果实现

本文详细介绍了在Cesium中实现全球海洋动态水面与自定义区域波浪效果的实战方法。通过解析核心概念Primitive与Geometry,并深入讲解Water材质的关键参数调节,指导开发者快速创建逼真的动态海洋。文章重点阐述了如何利用多边形坐标定义不规则图形区域,实现精准的局部水域波浪效果,并提供了性能优化与视觉提升的实用技巧。

weixin_29256771的博客 501

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 198

基于Python的携程景点评价爬虫与情感评分分析

摘要: 本项目通过Python技术栈实现携程景点评论的情感分析系统,包含数据爬取、文本预处理、情感评分和可视化分析全流程。使用requests抓取评论接口,jieba进行中文分词,SnowNLP计算情感得分(0-1),并通过词云、情感分布图呈现结果。典型分析显示72%评论为正面,负面反馈多涉及"排队久""票价贵"等问题。系统可辅助景点口碑管理,扩展方向包括多景点对比、BERT模型优化等。项目强调需遵守爬虫伦理,控制请求频率,适用于非商业用途的旅游数据分析。(150字)

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

逆向Shopee签名机制:从参数分析到稳定采集方案

本文深入解析了Shopee签名机制的逆向过程,从参数分析到稳定采集方案的实现。通过抓包定位关键参数`sap-ri`和`x-sap-sec`,还原了签名生成算法,并提供了Python实现代码。文章还分享了反反爬策略、性能优化技巧及长期维护建议,帮助开发者构建稳定的Shopee数据采集方案。

weixin_27722377的博客 672

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 130

硬件基础知识-电机知识

步进电机存在空载启动频率,所以步进电机可以低速正常运转,但若高于一定速度时就无法启动,并伴有尖锐的啸叫声;在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数。给电机两根线供电,电机就可以旋转,给正电压,电机正转,给相反电压,电机反转;电压越大,电机转得越快,电压越小,转速也变小。是一种直流电机,有刷电机的定子上安装有固定的主磁极和电刷,转子上安装有电枢绕组和换向器。控制器:使用专用的电子控制器来监测和控制电机的转速、电流和方向。线圈电流方向的交替变化是随电机转动的换相器和电刷来完成的。

weixin_46969363的博客 2296

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 458

2021年03月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。现在从m位中删除k位(0

人生就是一个不断学习的过程 1011

车间数据孤岛终于破了!C#上位机+MQTT打通产线与MES,数据延迟从小时级降到秒级

本文针对工业上位机开发中常见的车间数据与企业管理系统(MES)割裂问题,提出基于C#和MQTT协议的完整解决方案。通过EMQX MQTT Broker实现数据实时双向传输,将质量追溯时间从2小时缩短至10秒,生产计划自动下发,实现秒级数据延迟。方案采用分层解耦架构,支持设备更换和系统升级,核心优势包括低延迟、高可靠性和易扩展性。文章详细介绍了MQTT协议选型理由、整体架构设计、技术选型(EMQX Broker和MqttNet客户端),并提供了C#实现代码和部署流程。该方案已在实际产线验证,可有效解决&quo

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 480

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 411

学 Simulink—— 基于储能系统(BESS)并网逆变器的 削峰填谷(Peak Shaving & Valley Filling)功能仿真

本文详细介绍了基于储能系统(BESS)并网逆变器的削峰填谷功能Simulink仿真方法。主要内容包括:1)削峰填谷原理与典型日负荷曲线控制逻辑;2)简化系统拓扑与关键参数设置;3)分步骤建模过程,重点讲解EMS控制逻辑、SOC模型和PQ控制实现;4)典型仿真结果分析及参数调优建议;5)常见问题解决方案和工程扩展方向。通过该仿真可掌握BESS在用户侧储能、虚拟电厂等场景的核心应用,实现电网侧功率按峰谷时段规划、BESS充放电控制及并网逆变器PQ控制。文章还提供了完整的BESS/微网系列课程框架和混合微网系统进

xiaoheshang_123的博客 41

数据库主键选型指南:BIGINT vs VARCHAR

主键选型关乎数据库性能与架构演进。BIGINT(如雪花算法)在顺序写入、二级索引开销和分布式生成上优势显著,适合高并发核心链路;而传统 VARCHAR UUIDv4 因随机性导致频繁页分裂、存储膨胀,性能堪忧。UUIDv7 通过时间戳有序性实现高效追加写入,结合 BINARY(16) 存储可兼顾性能与安全,成为现代微服务新选择。关键在于:主键应稳定、无业务含义,优先选用趋势递增的紧凑类型,并根据场景合理采用双主键模式或 ULID 等替代方案。

小李同学的博客 301

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

自动化运维选型:四条技术路线的能力边界,以及它们为什么不能互相替代

自动化运维怎么选型?拆解配置管理、基础设施即代码、作业调度与场景化编排四条技术路线边界,分析账本归属与时间语义差异,给出四种架构组合与判断点,帮企业看清为何不能互相替代。

trainsignalcn的专栏 327

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C++算法(七)

C++ stack算法题和一些客观题

2503_94479566的博客 370

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

不用再为文本搜索单独维护一套系统!全文检索深度解析

为了给商品、客服工单或者企业知识库增加一个搜索框,企业往往需要在业务数据库之外,再部署一套Elasticsearch。数据库保存商品、订单和用户等真实业务数据,搜索引擎保存另一份文本索引;两套系统之间,还需要通过CDC、消息队列或者同步程序持续传输数据。一个看似简单的搜索需求,最后可能变成两套集群、两份数据和一条必须保持稳定的数据链路。由此产生的问题并不少:数据库已经完成更新,搜索结果却可能尚未同步;业务查询同时涉及文本、库存、权限和订单状态时,应用需要在两个系统之间来回组合结果;

TiDB 社区干货传送门 250

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 152

48-逻辑结构表空间段区块

默认 10%,意思是块里的空闲空间低于 10% 时就不再插入新行,留着给已有行的 UPDATE 变胖用。注意 INSERT 过程中每次申请新区,都是一次潜在的空间报错点,如果表空间满了,此刻就会抛 ORA-01653。剩下的空间被谁占了?段的每个区可以落在表空间的任一数据文件,所以 2T 的表在 32G 单文件上限(smallfile)的世界里照样能活——多加文件就行。,一张只有两个 CLOB 字段的表,实际在库里是三个段(表段 + 两个 LOBSEGMENT),空间统计漏算 LOB 段是新手常犯的错。

yuhou25的博客 286

市场调查与统计分析专业大学期间考证怎么安排?

市场调查与统计分析专业的考证规划,适合从一份完整的调查报告倒推:能不能设计问卷、判断样本是否合理、清洗数据,再把分析结果转化为业务建议?围绕这条能力链安排证书,比单纯按“热门程度”报名更有针对性。结合2026年的学习安排,并为2027年的实习、升学和求职预留时间,大学期间可以重点考虑六类证书:全国计算机等级考试证书、大学英语四级或六级成绩报告单、CDA数据分析师、初级统计专业技术资格证书、微软办公软件国际认证中的Excel相关证书,以及软考数据库系统工程师资格证书。

cc572502653的博客 158

Oracle 19c 在线重定义后旧表空间清理及 ASM 存储资源回收 SOP

Oracle 19c 在线重定义后旧表空间清理与 ASM 存储资源回收 SOP

「YYL DBA手记」 数据库 · 架构 · 运维 · 实战 yyldba.blog.youkuaiyun.com 486

大表 ALTER TABLE 怎么做?NineData OnlineDDL 配置与执行实践

介绍NineData OnlineDDL大表变更实践,涵盖执行策略、切表控制、拷贝批次与可视化进度追踪。

dbasenewbie的博客 270

从事件风暴到因果收敛:Mopheus多智能体协同事件触发架构与防循环实践

在构建生产级多智能体协同引擎的过程中,我们总结了三条核心工程准则:1.不可变因果链优于事后关系反查在高度并发且异步的多智能体网络中,因果关系的追溯绝不能依赖事后查库反查关联;将只增的因果祖先链显式封装在事件载荷与任务上下文中,以O(1)的内存检查实现确定性极高的闭环防范。2.生产端纯粹广播与消费端前置极速过滤是高吞吐的基石遵循严格的Pub/Sub模式,让核心业务实体与下游智能体编排解耦;通过调度层内存条件字典求值(conditions),在纳秒级内过滤掉99%的无关事件,保障零业务侵入与极高的系统吞吐。

weixin_54551388的博客 240

Spring事务和事务传播机制

3. 可重复读(REPEATABLE READ): 事务不会读到其他事务对已有数据的修改, 即使其他事务已提交. 也就可以确保同⼀事务多次查询的结果⼀致, 但是其他事务新插⼊的数据, 是可以感知到的. 这也就引发了幻读问题. 可重复读, 是 MySQL 的默认事务隔离级别.p1事务可以认为是⽗事务, 嵌套事务是⼦事务. ⽗事务出现异常, ⼦事务也会回滚, ⼦事务出现异常, 如果不进⾏处理, 也会导致⽗事务回滚.

txxzjmzlh的博客 205

Redis 入门详解:核心特性、重要文件与全局命令实战

本文系统介绍了Redis的核心特性、重要文件及全局命令。Redis凭借内存存储、C语言实现和单线程设计,具备极高的读写性能;支持持久化(RDB/AOF)、主从复制与集群架构,适用于缓存、排行榜、计数器等场景,但不适合存储海量冷数据。文中还解析了常见面试题,如为何快速、单线程原理、持久化机制、KEYS *禁用原因及过期键处理策略,强调其在高并发场景下的优势与局限。

2303_77004089的博客 198

【FDE前沿部署工程师实战教程】第62章:Enterprise AI Developer Platform——企业级 AI 开发者平台与低代码 AI 应用工厂

企业从AI能力平台迈向AI应用生产平台,需构建统一的企业级AI开发者平台,将模型、RAG、Agent、Workflow等能力封装为可视化、可复用的开发工具。通过PromptIDE、AgentBuilder、WorkflowBuilder等模块,实现低代码与专业代码协同,降低开发门槛。平台覆盖应用全生命周期管理,集成测试评估、安全治理与CI/CD发布体系,推动AI应用规模化、标准化交付。最终形成“需求→设计→开发→测试→发布→运营”的企业AI应用工厂模式,助力制造等行业的智能化转型。

IT古董 305
上一篇: GreatSQL备份报错“PROCESS权限不足“分析与解决
下一篇: 技术干货 | 如何将大表在线改造为分区表并释放空间
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值