Mysql SQL_CALC_FOUND_ROWS和分页

Joh*_*ohn 12 mysql pagination sql-calc-found-rows

所以我有一个有500多万行的表.当我使用SQL_CALC_FOUND_ROWS时,查询将永远挂起.当我拿出它时,查询会在一秒内执行LIMIT,25.我的问题是分页原因是否有替代获得总行数?

Mar*_*c B 7

SQL_CALC_FOUND_ROWS强制MySQL扫描所有匹配的行,即使它们永远不会被获取.在内部,它相当于在没有LIMIT子句的情况下执行的相同查询.

如果您通过WHERE进行的过滤不是太疯狂,您可以计算并缓存各种类型的过滤器,以节省calc_found_rows强加的全扫描负载.对于大多数可能的where子句,基本上运行"select count(*)from ... where ....".

否则,你可以采用谷歌风格,只是吐出一些偶尔与现实无关的页码(你知道,你看到"Goooooooooooogle",进入第3页,然后突然用完结果).


小智 5

详细讨论使用MySQL实现Google风格的分页