1.COUNT()

该方法会返回查询的总记录数,通常我们的使用方法是COUNT(*):

SELECT COUNT(*) AS TOTAL FROM TABLE_NAME WHERE 1=1 LIMIT 0,50;

要取得分页前的总数,只需去掉LIMIT即可;

SELECT COUNT(*) AS TOTAL FROM TABLE_NAME WHERE 1=1;

优化查询:用COUNT(id)或COUNT(1)就不用查询所有,通过自增id或指定随机一列用来返回记录数,查询效率更高。

 

2.FOUND_ROWS()

该方法要配合SQL_CALC_FOUND_ROWS一起使用,使用方法:

SELECT SQL_CALC_FOUND_ROWS * FROM TABLE_NAME WHERE 1=1 LIMIT 0,50;
SELECT FOUND_ROWS() AS TOATL;

该方法要需要两条select语句,用SQL_CALC_FOUND_ROWS告诉MySQL将sql处理的数记下来,再用FOUND_ROWS()方法取到这个记录,虽然也是两个语句,但是就获取分页前总数而言只执行了一次主查询,所以效率比COUNT()要高很多,这个方法的好处就是他记录的是分页前的总条数,不需要再将LIMIT去掉;

优化查询:当where限制条件多时使用FOUND_ROWS()方法,没有where限制时使用COUNT()方法会更快;覆盖索引时使用FOUND_ROWS()性能高,无覆盖索引使用COUNT()性能高;

但是FOUND_ROWS()方法有个缺点,那就是他记录的是上一条select语句执行的sql,如果是在并发环境中,不加以控制的话,基本取不到正确的值,但是用事务控制的话又很影响性能,所以最好是连着使用。