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

mybatisplus.BaseMapper#selectPage 使用方法

使用 com.baomidou.mybatisplus.mapper.BaseMapper#selectPage 方法查询分页列表时,在mysql层面会执行两条sql,一条是count,另一条才是获取分页数据,大部分场景下我们都可以直接使用这个方法来进行查询,但是一些特殊场景下这个获取总数的sql会比获取分页数据执行的耗时更高。

列子

1.count 查询

    SELECT user_identifier, transaction_date, monetary_unit, SUM(incoming_value) AS total_incoming, SUM(ABS(outgoing_value)) AS total_outgoing, SUM(closing_value) AS total_balance FROM financial_records_summary WHERE user_identifier = ? AND transaction_date >= ? AND transaction_date <= ? GROUP BY user_identifier, transaction_date, monetary_unit ORDER BY transaction_date DESC, monetary_unit, total_balance DESC
) AS aggregated_results

2.分页信息查询

SELECT user_identifier, transaction_date, monetary_unit, SUM(incoming_value) AS total_incoming, SUM(ABS(outgoing_value)) AS total_outgoing, SUM(closing_value) AS total_balance 
FROM financial_records_summary 
WHERE account_owner = ? AND transaction_date >= ? AND transaction_date <= ? 
GROUP BY user_identifier, transaction_date, monetary_unit 
ORDER BY transaction_date DESC, monetary_unit, total_balance DESC 
LIMIT 0, 10

当数据量足够大的时候,第一个sql查询耗时是第二个sql查询耗时的两倍多,原因主要是以下几点:

  • COUNT需要处理全部结果集
  • 数据查询有LIMIT限制可能提前终止
  • 子查询中的ORDER BY对COUNT来说是多余开销

通过移除不必要的操作可以大幅度优化这个sql的性能

相关文章:

  • GO 语言中的flag包--易懂解释
  • 逆向工程:破解某金融App加密协议——在安全与法律的钢丝绳上行走
  • 常用数组方法、字符串方法、数组 ↔ 字符串 的转换、TS类型提示 (大全)
  • i++与++i的区别
  • B2B供应链交易平台多商户电商商城系统开发批发采购销售有哪些功能?发展现状如何?
  • 第14篇:数据库中间件的分布式配置与动态路由规则热加载机制
  • 使用 pytdx,`TdxHq_API` 接口下载数据的 AI 编程指引提示词
  • C++17 std::string_view:性能与便捷的完美结合
  • 5g LDPC编译码-LDPC编码
  • 解决启动SpringBoot是报错Command line is too long的问题
  • 玄机 日志分析-Tomcat日志分析 WriteUp
  • ES6从入门到精通:前言
  • Python实现prophet 理论及参数优化
  • postgresql|数据库|只读用户的创建和删除(备忘)
  • Manus 框架与 COKE 框架解析及完整 Demo
  • 从走线到互连:优化高速信号路径设计的快速指南
  • 复发白血病异基因造血干细胞移植后疗效的改进策略
  • 性能监控的核心要点
  • AI书签管理工具开发全记录(二十):打包(完结篇)
  • Oracle 数据库对象管理:表空间与表的操作
  • 牛商网建站/软件外包公司是什么意思
  • 企业做pc网站需要什么资料/海外推广代理商
  • 个人备案能公司网站/关键词是网站seo的核心工作
  • 电子商务网站设计分析怎么做/重庆seo论
  • 不锈钢网站哪家最专业/网络推广项目代理
  • 九九电视剧免费观看完整版/济南网站seo