数据库:MYSQL
之前在有个项目中,代码分页比较慢,因此想到了在SQL语句中使用LIMIT进行分页,然后这样写:
1、查出符合条件的记录总数
SELECT COUNT(*) from `t_pinfo` WHERE ......;
2、查询当页要显示的数据
SELECT a,b,c FROM `t_pinfo` WHERE ...... limit 1,15;
这样感觉还是很慢,至少执行了2次耗时查询
然后改成这样:
SELECT SQL_CALC_FOUND_ROWS a,b,c FROM `t_pinfo` WHERE ...... limit 1,15;
SELECT FOUND_ROWS() total;
这样只要执行一次较耗时的复杂查询
然后SELECT FOUND_ROWS() total;可以得到上边与之对应的总条数
通过这样获取Convert.ToInt32(totalResult.total),其中totalResult就是查询返回的结果
第二个 SELECT返回一个数字,指示了在没有LIMIT子句的情况下,第一个SELECT返回了多少行 (若上述的 SELECT语句不包括 SQL_CALC_FOUND_ROWS 选项,则使用LIMIT 和不使用时,FOUND_ROWS() 可能会返回不同的结果)。