我们在分页程序中往往这样写

SELECT COUNT(*) from `table` WHERE xxxxxx;  // 查出符合条件的记录总数
SELECT * FROM `table` WHERE xxxxxx limit M,N; // 查询当页要显示的数据

这种先统计总数,再统计分页的做法可以替换为下面的写法

SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE xxxxxx  limit M, N; // 获取指定页的数据,且统计总条数

其中的 SQL_CALC_FOUND_ROWS 语句会统计出符合筛选条件的记录总数,保存在mysql 端;

后面使用 SELECT FOUND_ROWS() 语句可以得到这个数字,不用再次计算。当然,如果你再次运行了SQL_CALC_FOUND_ROWS的话,这个数字就会被覆盖成最新的。

如果在前一条语句中没有使用SQL_CALC_FOUND_ROWS选项,SELECT FOUND_ROWS()将返回前一条语句实际返回的行数

注意

mysql会为当前连接保存这个值,各个连接的SQL_CALC_FOUND_ROWS结果互不影响

两条sql语句可以简化成一条sql语句,看似简单了,实则不然。

原因

1. 在有索引覆盖的情况下,SQL_CALC_FOUND_ROWS 和 COUNT(*)的效率差不多

2. 在没有索引覆盖的情况下,SQL_CALC_FOUND_ROWS的效率要远低于COUNT(*)的效率,大概只有COUNT(*)的十分之一,甚至更低

总结

不建议使用 SQL_CALC_FOUND_ROWS来获取总数

建议使用COUNT(*)来统计总数后,保存在本地

记得尽量使用索引覆盖,这样count(索引列)可以使用到索引覆盖,效率很高

SQL_CALC_FOUND_ROWS的用法相关推荐

  1. quvhu重复行MySQL,利用mysql中的SQL_CALC_FOUND_ROWS 来实现group by后的记录数统计

    最近正在做一个显示消息的列表页,列表页中需要根据一个字段来分组显示.并且需要一个分页的效果. 大家也知道group by 后的数据是每一组一行记录,统计分组后的总的记录数又不能用count,所以SQL ...

  2. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  3. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  4. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  5. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  6. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  7. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  8. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  9. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

最新文章

  1. master page頁面如何用js來做輸入驗證
  2. WebAPI接口安全校验
  3. eclispe使用外部tomcat总结
  4. 德国拜尔集团迎来人工智能专家--李飞飞
  5. PostgreSQL类似Oracle MERGE功能的实现
  6. mvc:view-controller
  7. java数组冒泡排序法编程_java实现数组冒泡排序的方法
  8. COM口总是有惊叹号怎么办
  9. 车联网相关知识点整理
  10. python代理池搭建
  11. 获取iPhone手机 UDID的方式--一网打尽(无论有无MAC电脑)
  12. 计算机桌面空白图标如何删除,桌面上有两个i空白文件的图标删不掉怎么办急急急...
  13. 报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
  14. virtualbox安装androidx86进入console控制台,不能进入启动界面,卡死在detecting android-x86 found at /dev/sda1
  15. 我的游戏学习日志3——三国志GBA
  16. 惊了,Python 民俗社会科学项目,看看能否预测【面向哪里写BUG少】
  17. ICP许可证怎么申请?
  18. 一文读懂元数据管理!
  19. GPS授时服务器在电厂视频监控系统中的应用
  20. 智能楼宇3D虚拟仿真实训平台

热门文章

  1. WPS演示中万花筒效果的实现
  2. ***病毒的隐藏方式
  3. 办公室心理学-九型人格导图
  4. HDU多校4 - 6992 Lawn of the Dead(线段树+模拟)
  5. 洛谷 - P5192 Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流(有源汇有上下界的最大流)
  6. 牛客多校2 - All with Pairs(字符串哈希+next数组)
  7. CodeForces - 1300D Aerodynamic(几何+思维)
  8. CodeForces - 1200E Compress Words(字符串哈希)
  9. POJ - 3358 Period of an Infinite Binary Expansion(欧拉定理)
  10. 乘积的C语言,c语言矩阵相乘