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

关于分页的问题SQL_CALC_FOUND_ROWS

SQL_CALC_FOUND_ROWS 是MySQL中的一个特殊修饰符(modifier),用于执行在应用LIMIT分页限制的同时获取符合条件的总行数,而不仅仅是返回查询结果的部分数据。

通常情况下,当我们使用 LIMIT 条件来限制查询结果的数量时,数据库只会返回满足条件的前N行数据,而不会告诉你总共有多少行符合查询条件。这对于实现分页功能时可能会有问题,因为你无法知道总共有多少行数据,从而无法生成正确的分页导航。

SQL_CALC_FOUND_ROWS 的作用就在于解决这个问题。当在查询中使用了 SQL_CALC_FOUND_ROWS 修饰符时,MySQL会在执行查询时同时计算符合条件的总行数,而不是在返回结果之后再进行额外的查询来计算总行数。

用法示例:

假设有一个名为 t_account 的表,我们要查询其中 deleted='no' 的数据,并使用 LIMIT 来限制结果的数量。如果想同时获取符合条件的总行数,可以这样写

SELECT SQL_CALC_FOUND_ROWS accountid
FROM t_account
WHERE deleted = 'no'
ORDER BY accountid DESC
LIMIT 0, 10;

上述查询将返回满足条件的 accountid 列的前10行数据,并通过执行 SELECT FOUND_ROWS(); 来获取符合条件的总行数。

SELECT FOUND_ROWS();

这个语句将返回之前查询的总行数,而不是实际结果的行数。这样,我们就可以在实现分页导航时,知道总共有多少行数据,从而正确地生成分页链接。

SELECT FOUND_ROWS(); 不会再次查询数据库。当你在查询中使用了 SQL_CALC_FOUND_ROWS 修饰符时,MySQL会在执行原始查询时同时计算符合条件的总行数,并将其存储在内部的状态中。随后,当你执行 SELECT FOUND_ROWS(); 这个语句时,MySQL会从内部状态中获取之前计算得到的总行数,而不会再次查询数据库。

这种处理方式相比于再次执行相同的查询来获取总行数,能够避免额外的数据库开销,提高了查询性能。它特别适用于在实现分页功能时,你可以获取总行数来计算总页数,而无需再次查询获取符合条件的行数。


http://www.kler.cn/a/149156.html

相关文章:

  • Mit6.S081-实验环境搭建
  • Go开发指南-Gin与Web开发
  • 利用 Screen 保持 VSCode 连接远程任务持续运行
  • 树-好难-疑难_GPT
  • 【C++ 算法进阶】算法提升十三
  • c/c++--struct对比
  • 每日一题:LeetCode-202.面试题 08.06. 汉诺塔问题
  • 11.28C++
  • Linux环境安装Java,Tomcat,Mysql,
  • 腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群
  • CCFCSP试题编号:202109-2试题名称:非零段划分
  • leetcode每日一题35
  • Web学习笔记
  • 面试必须要知道的MySQL知识--索引
  • AntDB数据库:从海量数据处理,到5G计费商用核心
  • 使用vue-admin-template时,需要注意的问题,包括一定要去除mock.js注释
  • 0005Java程序设计-ssm基于微信小程序的校园求职系统
  • Java后端开发——MVC商品管理程序
  • Java Web基础教程
  • 第二证券:燃料电池产业进入发展快车道 多家公司披露布局进展
  • 【FGPA】Verilog:JK 触发器 | D 触发器 | T 触发器 | D 触发器的实现
  • 【MATLAB】RLMD分解+FFT+HHT组合算法
  • NOI / 1.7编程基础之字符串 30:字符环 c语言 两次遍历解决循环
  • 11.27二叉查找树,遍历二叉树,层序(判断是不是完全二叉树),根据遍历序列重构二叉树,递归输入建树(树的定义,结构体细节,typedef)
  • Spring Boot进行单元测试,一个思路解决重启低效难题!
  • Docker compose启动服务遇到的问题