300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql 分页获取总条数_MySQL查询分页 同时获取总记录数

mysql 分页获取总条数_MySQL查询分页 同时获取总记录数

时间:2022-06-24 02:02:37

相关推荐

mysql 分页获取总条数_MySQL查询分页 同时获取总记录数

Mysql分页查询获取totalCount大幅提升性能的办法总结

MySQL查询分页,通常在MySQL中获取记录总数都会使用SELECT COUNT(*) FROM tblName之类的语句

这类语句的缺点是:记录集还需要单独的查询来获取,相当于查询两次,推荐如下写法:

SELECT SQL_CALC_FOUND_ROWS fldName1, fldName2 FROM tblName WHERE fldName3 = 1 LIMIT 10, OFFSET 20;

SELECT FOUND_ROWS();

虽然有两条SQL语句,但实际上只执行了一次数据库查询

做分页查询中,一般情况下需要两个sql,查当前页数据 和 查记录总条数;但后者的查询结果变化有时候并不大,而且count还占用了很大一部分的查询时间;主要是想用一种省时简便的方法查询符合条件的记录总数,

查询数据使用的sql为:

SELECT SUBSTRING_INDEX(`url`,/,3)AS host,COUNT(*)AS count FROM`tab`WHERE`type`=4GROUP BY host HAVING(count>=5)ORDER BY count desc LIMIT0,10

以下是网上查到的一些尝试过的方法(不过后来都感觉不太合适,所以,亮点在最后):

方法一: 一般情况下可以使用DISTINCT来查询总数

selectcount(DISTINCT SUBSTRING_INDEX(`url`,/,3))ascfromtabwheretype=4

但是 查询数据中的sql 有 having 子句,这样得到的总数是没有经过条件筛选的。这个结果是错误的。

方法二: 通过 SQL_CALC_FOUND_ROWS 选项忽略 LIMIT 子句,然后通过FOUND_ROWS()获得查询总数,那么sql改为:

SELECT SQL_CALC_FOUND_ROWS SUBSTRING_INDEX(`url`,/,3)AS host,COUNT(*)AS count FROM`tab`WHERE`type`=4GROUP BY host HAVING(count>=5)ORDER BY count desc LIMIT0,10

再通过 select FOUND_ROWS(); 获得总数

这样获得的总数没问题,但是由于分页程序需要先获得符合条件的总数,才能生成 page_list ,以及验证offset,和总页数等信息&#

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。