MySQL高效获取记录总数

通常mysql获取查询记录总数我们使用如下语句:

SELECT COUNT(*) FROM users WHERE k='avs';  
或:
SELECT id FROM goods WHERE k='avs' LIMIT 10;

但是记录总数总是需要单独的语句来查询,例如在分页查询程序中就有这样的问题,其实mysql可以在一次查询中获取记录和总数的,这就是要使用SQL_CALC_FOUND_ROWS参数,使用方法如下:

SELECT SQL_CALC_FOUND_ROWS goods WHERE k='avs' LIMIT 10; 
SELECT FOUND_ROWS();

这虽然是两个sql语句,但是确是查询一次数据库,效率明显提高了一半!其中SQL_CALC_FOUND_ROWS 告诉Mysql将sql所处理的行数记录下来,FOUND_ROWS() 则取到了这个纪录。

### MySQL 分页查询获取记录数 在MySQL中执行分页查询的同时获取记录数是一个常见的需求。这可以通过组合`LIMIT`子句和特定的方法来实现。 #### 方法一: 使用 `COUNT(*)` 对于简单的场景,可以先通过一条单独的SQL语句计算总的记录数量: ```sql SELECT COUNT(*) AS total_count FROM your_table; ``` 接着再执行带有`LIMIT`子句的实际数据检索操作[^1]。 然而,在实际应用中更高效的做法是在一次数据库交互过程中完成这两个任务。为此,有两种主要方式可供选择。 #### 方法二: 利用 `SQL_CALC_FOUND_ROWS` 和 `FOUND_ROWS()` 函数(已废弃) 过去常用的方式是利用`SQL_CALC_FOUND_ROWS`选项加上后续调用`FOUND_ROWS()`函数来获得未加限制条件下的全部匹配项数目: ```sql SET @offset=0, @limit=10; -- 查询带分页的结果集 SELECT SQL_CALC_FOUND_ROWS * FROM your_table LIMIT @offset, @limit ; -- 即刻之后立即查询总数 SELECT FOUND_ROWS(); ``` 注意这种方法已经被官方标记为过时,并将在未来的版本中移除支持[^3]。 #### 推荐方法三: 联合查询或存储过程 当前推荐的是在一个请求里同时返回分页后的结果列表及其对应的总计数值。一种做法是构建联合查询(JOIN),另一种则是创建自定义存储过程封装逻辑处理。这里给出一个较为简洁的例子——使用子查询形式一次性取得所需信息: ```sql SELECT t.*, (SELECT COUNT(*) FROM your_table WHERE condition) as total_records FROM ( SELECT * FROM your_table WHERE condition ORDER BY some_column LIMIT offset , row_count ) t ; ``` 此方案不仅减少了网络往返次数提高了性能,而且保持了良好的可读性和维护性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Longsir_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值