当您限制SQL查询返回的行数时,通常用于分页,有两种方法可以确定记录的总数:
方法1
在原始的SELECT
语句中包含SQL_CALC_FOUND_ROWS
选项,然后通过运行SELECT FOUND_ROWS()
来获取总行数:
SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE id > 100 LIMIT 10;
SELECT FOUND_ROWS();
方法2
正常运行查询,然后通过运行SELECT COUNT(*)
获取总行数。
SELECT * FROM table WHERE id > 100 LIMIT 10;
SELECT COUNT(*) FROM table WHERE id > 100;
哪种方法是最好/最快的?
SQL_CALC_FOUND_ROWS
花费了超过 20 秒;而使用单独的COUNT(*)
查询不到 5 秒钟(对于计数和结果查询均是如此)。 - Sam DufelSQL_CALC_FOUND_ROWS
可以更快,我想知道在什么情况下(如果有的话)它实际上确实更快! - svidgentblA
,tblB
,tblC
,tblD
,tblY
WHERE tblA.b = tblC.id AND tblA.c = tblB.id AND tblA.d = tblD.id AND tblA.y = tblY.id - Al Poid
)的查询时,它单独要花费0.25秒。 - transilvladFOUND_ROWS()
在MySQL 8.0.17中已经被弃用。另请参见@madhur-bhaiya的答案。 - arueckauer