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

mybatis用pagehelper 然后用CountJSqlParser45,发现自己手写的mapper查询效率很慢

如题

  • 效率慢
  • 疑惑

效率慢

分页查询,发现效率很慢,然后发现是比较复杂的sql,CountJSqlParser45它不会帮忙优化掉,就是select多少字段它count的时候也还是这么多字段
框架里的用法是这样的
在这里插入图片描述

所以去看了CountJSqlParser45里面的代码,发现如果有group之类的,它就不帮忙把count优化一下,直接在外面套了一层count(0)

知道问题之后就是覆盖这个方法,所以在自己的下面新建了一个同路径同名的覆盖它
在这里插入图片描述
原来的代码是发现不是简单sql就直接不处理了,现在的逻辑是发现是PlainSelect但是不是isSimpleCount的情况下,把查询里面的select的普通字段都去除掉,新写了cleanSimpleField这个方法
在这里插入图片描述

逻辑很简单,如果是比较复杂的字段还留着,因为可能会影响结果,比如函数啊别名啊之类的,但是如果只是简单的字段都去掉,如果发现都是简单字段,那么直接用1来代替

    public List<SelectItem> cleanSimpleField(PlainSelect select){//因为查询太多的话会导致速度很慢,所以移除掉普通的字段,把肯能影响结果的字段留下来List<SelectItem> newSelectItems =new ArrayList<>();//遍历原来的select 然后把需要的留下for (SelectItem item : select.getSelectItems()) {//select列中包含参数的时候不可以去掉,否则会引起参数个数错误if (item.toString().contains("?")) {newSelectItems.add(item);}//如果查询列中包含函数,也不可以,函数可能会聚合列if (item instanceof SelectExpressionItem) {Expression expression = ((SelectExpressionItem) item).getExpression();if (expression instanceof Function) {String name = ((Function) expression).getName();if (name != null) {String NAME = name.toUpperCase();if (skipFunctions.contains(NAME)) {//go on} else if (falseFunctions.contains(NAME)) {newSelectItems.add(item);} else {for (String aggregateFunction : AGGREGATE_FUNCTIONS) {if (NAME.startsWith(aggregateFunction)) {falseFunctions.add(NAME);newSelectItems.add(item);}}skipFunctions.add(NAME);}}} else if (expression instanceof Parenthesis && ((SelectExpressionItem) item).getAlias() != null) {//#555,当存在 (a+b) as c 时,c 如果出现了 order by 或者 having 中时,会找不到对应的列,// 这里想要更智能,需要在整个SQL中查找别名出现的位置,暂时不考虑,直接排除newSelectItems.add(item);}}}//都是简单的都被去掉了,那么就把原来的第一个拿来if (ObjectUtil.isEmpty(newSelectItems)){newSelectItems.add(new SelectExpressionItem(new Column("1")));}return newSelectItems;}

疑惑

照理说LocalMySqlDialect里面改成自己的新的类,不是CountJSqlParser45应该也行的,但是不知道为什么我把CountJSqlParser45改成自己新写的类不行,所以只能用覆盖的方式了

this.countSqlParser = ClassUtil.newInstance(properties.getProperty("countSqlParser"), CountSqlParser.class, properties, CountJSqlParser45::new);
//改成下面这个不知道为什么不行
```c
this.countSqlParser = ClassUtil.newInstance(properties.getProperty("countSqlParser"), CountSqlParser.class, properties, MyCountJSqlParser45::new);

相关文章:

mybatis用pagehelper 然后用CountJSqlParser45,发现自己手写的mapper查询效率很慢

如题 效率慢疑惑 效率慢 分页查询,发现效率很慢,然后发现是比较复杂的sql,CountJSqlParser45它不会帮忙优化掉,就是select多少字段它count的时候也还是这么多字段 框架里的用法是这样的 所以去看了CountJSqlParser45里面的代码,发现如果有group之类的,它就不帮忙把count优化…...

【优选算法 二分查找】二分查找入门详解:二分查找 & 在排序数组中查找元素的第一个和最后一个位置

二分查找 题目描述 题目解析 暴力解法 我们可以从左往右遍历一次数组&#xff0c;如果存在 target 则返回数组的下标&#xff0c;否则返回 -1&#xff1b; 时间复杂度 O(N)&#xff0c;因为没有利用数组有序的特点&#xff0c;每次比较只能舍弃一个要比较的数&…...

WPF编写工业相机镜头选型程序

该程序满足面阵和线阵的要求。 前端代码 <Window x:Class"相机镜头选型.MainWindow" Loaded"Window_Loaded"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml…...

网络安全内容整理二

网络嗅探技术 网络监听 网络监听&#xff0c;也称网络嗅探(Network Sniffing)&#xff1a;在他方未察觉的情况下捕获其通信报文、通信内容的技术 网卡的工作模式&#xff1a; 1.广播模式(Broadcast Mode)&#xff1a;网卡能够接收网络中的广播信息 2.组播模式(Multicast Mo…...

解决git did not exit cleanly (exit code 128)问题

解决 git did not exit cleanly &#xff08;exit code 128&#xff09;问题 1、错误描述2、解决方法2.1 方法一2.2 方法二 1、错误描述 使用TortoiseGit进行操作时&#xff0c;总是提示下述错误。 2、解决方法 2.1 方法一 打开 TortoiseGit -> Settings 点击 Network&…...

Linux入门攻坚——40、Linux集群系统入门-lvs(1)

Cluster&#xff0c;集群&#xff0c;为了解决某个特定问题将多台计算机组合起来形成的单个系统。 这个单个集群系统可以扩展&#xff0c;系统扩展的方式&#xff1a;scale up&#xff0c;向上扩展&#xff0c;更换更好的主机&#xff1b;scale out&#xff0c;向外扩展&…...

momentum 和 weight_decay 的区别

momentum 和 weight_decay 的区别 两者在优化器中的作用不同,主要体现在优化的目的和机制上。 1. momentum(动量) 作用:加速收敛并减少优化过程中的震荡。 机制: momentum 是用于在梯度下降中积累动量的机制。它通过在每一步中综合之前的更新方向,帮助模型在陡峭区域加速…...

Vue 3 + TypeScript进阶用法

在掌握了 Vue 3 和 TypeScript 的基本使用后&#xff0c;你可以进一步探索一些进阶特性和最佳实践。这些包括更复杂的类型定义、自定义 hooks、全局状态管理等。下面是一些关键点&#xff1a; 1. 更复杂的类型定义 Props 和 Emits 的类型 对于组件的 props 和 emits&#xf…...

AbutionGraph-时序向量图谱数据库-快速安装部署

运行环境 1&#xff09;操作系统 最好是使用CentOS7或者Ubuntu18以上系统&#xff0c;不满足的话请升级系统内核gcc版本至8以上版本。 支持所有国产主流操作系统银河麒麟、统信OS、深度等等&#xff0c;均做过兼容性测试&#xff1b; 2&#xff09;CPU 为确保数据库每个进…...

Delphi-HTTP通讯及JSON解析

HTTP POST 请求函数 HttpPost 此函数用于发送带有JSON内容的POST请求到指定的URL&#xff0c;并接收服务器响应。它包括了必要的异常处理&#xff0c;确保在遇到错误时可以记录日志。 参数&#xff1a; sUrl&#xff1a;目标URL。sJson&#xff1a;要发送的JSON格式字符串。 返…...

Postgres 如何使事务原子化?

原子性&#xff08;“ACID”意义上的&#xff09;要求 对于对数据库执行的一系列操作&#xff0c;要么一起提交&#xff0c;要么全部回滚&#xff1b;不允许中间状态。对于现实世界的混乱的代码来说&#xff0c;这是天赐之物。 这些更改将被恢复&#xff0c;而不是导致生产环境…...

[Vue3]简易版Vue

简易版Vue 实现ref功能 ref功能主要是收集依赖和触发依赖的过程。 export class Dep { // 创建一个类&#xff0c;使用时使用new Depconstructor(value) { // 初始化可传入一个值this._val value;this.effects new Set(); //收集依赖的容器&#xff0c;使用set数据结构}…...

ElasticSearch学习记录

服务器操作系统版本&#xff1a;Ubuntu 24.04 Java版本&#xff1a;21 Spring Boot版本&#xff1a;3.3.5 如果打算用GUI&#xff0c;虚拟机安装Ubuntu 24.04&#xff0c;见 虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客文章浏览阅读6.6k次&#xff0…...

LabVIEW算法执行时间评估与Windows硬件支持

在设计和实现复杂系统时&#xff0c;准确估算算法的执行时间是关键步骤&#xff0c;尤其在实时性要求较高的应用中。这一评估有助于确定是否需要依赖硬件加速来满足性能需求。首先需要对算法进行时间复杂度分析并进行实验测试&#xff0c;了解其在Windows系统中的运行表现。根据…...

经验帖 | Matlab安装成功后打不开的解决方法

最近在安装Matlab2023时遇到了一个问题&#xff1a; 按照网上的安装教程成功安装 在打开软件时 界面闪一下就消失 无法打开 但是 任务管理器显示matlab在运行中 解决方法如下&#xff1a; matlab快捷方式–>右键打开属性–>目标 填写许可证文件路径 D:\MATLAB\MatlabR20…...

Ubuntu Linux 文件、目录权限问题

本文为Ubuntu Linux操作系统- 第五弹 此文是在上期文件目录的内容操作基础上接着讲权限问题 上期回顾&#xff1a;Ubuntu Linux 目录和文件的内容操作 文件访问者身份与文件访问权限 Linux文件结构 所有者&#xff08;属主&#xff09;所属组&#xff08;属组&#xff09;其他…...

LabVIEW密码保护与反编译的安全性分析

在LabVIEW中&#xff0c;密码保护是一种常见的源代码保护手段&#xff0c;但其安全性并不高&#xff0c;尤其是在面对专业反编译工具时。理论上&#xff0c;所有软件的反编译都是可能的&#xff0c;尽管反编译不一定恢复完全的源代码&#xff0c;但足以提取程序的核心功能和算法…...

yolo11经验教训----之一

一、格式转换 可以把python中的.pt文件&#xff0c;导出为libtorch识别的格式&#xff1a; model YOLO("yolo11n.pt") model.export(format"torchscript") 二、查看结构 在c中&#xff0c;我用qt&#xff0c;这样做的&#xff1a; #include "…...

异步处理优化:多线程线程池与消息队列的选择与应用

目录 一、异步处理方式引入 &#xff08;一&#xff09;异步业务识别 &#xff08;二&#xff09;明确异步处理方式 二、多线程线程池&#xff08;Thread Pool&#xff09; &#xff08;一&#xff09;工作原理 &#xff08;二&#xff09;直面优缺点和适用场景 1.需要快…...

Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置

文章目录 前言一、下载CentOS镜像1. 下载 二、创建虚拟机hadoop三、CentOS安装与配置1. 安装CentOS2. 配置虚拟网络及虚拟网卡2.1 配置虚拟网络2.2 配置虚拟网卡 3. 安装 SSH 远程连接工具 FinalShell3.1 简介3.2 下载和安装3.2.1 下载3.2.2 安装 3.3 查看动态ip地址3.4 使用Fi…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...