我有一个复杂的MySQL查询,需要花费大量时间,从一个行超过150k的表和几个JOINS和子查询中进行选择。我限制了结果的数量,但我需要知道总行数。
有没有办法不用COUNT(*)
作为字段来重复查询? (重复查询几乎使脚本完成所需的时间翻倍)
答案 0 :(得分:3)
MySQL有一个名为SQL_CALC_FOUND_ROWS
的子句,它放在SELECT
之后和任何字段名之前。然后,您调用仅SELECT FOUND_ROWS() AS rows
的第二个查询,它会显示上一个查询找到的行数。
答案 1 :(得分:2)
实际上两个查询可能会更快(所以你可能只想做一些快速测试):
在任何情况下,尝试确保COUNT(*)可以使用索引(如果使用EXPLAIN查询,它将在Extra列中说“using index”)
您还可以考虑缓存COUNT(*)结果,如果它不必是精确的(因为您限制了结果)。