不要使用 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS()
这里报告了错误
: https://bugs.mysql.com/bug.php?id=18454
和这里:https : //bugs.mysql.com/bug.php?id=19553
而在小表上,BENCHMARK 更多地依赖于其他事物,因此您的 SELECT 所花费的时间将与 COUNT(0) 大致相同 - SQL_CALC_FOUND_ROWS 仍然限制 LIMIT 和 ORDER BY 数据库优化,因此如果您依赖它们,请不要使用SQL_CALC_FOUND_ROWS
在大型表上,BENCHMARK 差异变得很大,其中 COUNT(0) 可能需要 0.003 秒相同的 SQL_CALC_FOUND_ROWS 现在可能需要 20 秒
从所有指标来看,COUNT(0) 是最佳选择
计数(0) 语法:
(SELECT COUNT(0) FROM tableNames WHERE condition) AS alias
// alias is optional but needed if you need to use the result later
所以你的总查询看起来像这样
(SELECT COUNT(0) FROM my_table WHERE name LIKE '%prashant%') AS countResults;
SELECT Id, Name FROM my_table WHERE Name LIKE '%prashant%' LIMIT 0, 10;
然后只需在其他地方需要它的任何地方调用 countResults ......
使用 COUNT(0) 的另一个优点是您可以使用它来搜索与此处相同的表,也可以使用它来搜索不同的表...
因此,例如,如果找到的每个人也分别有 3、2、1、5 个不同的工作......你可以添加一个
(SELECT COUNT(0) FROM my_jobs_table WHERE name = name_row_in_jobs_table) AS jobs
像这样在你原来的 SELECT 里面
SELECT Id, Name (SELECT COUNT(0) FROM my_jobs_table WHERE name = name_row_in_jobs_table) AS jobs FROM my_table WHERE Name LIKE '%prashant%' LIMIT 0, 10;
给你:
--------------------
| id | Name | jobs |
--------------------
| 1 | Alice| 3 |
--------------------
| 2 | John | 2 |
--------------------
| 3 | Bob | 1 |
--------------------
| 4 | Jill | 5 |
--------------------
因此,当显示 name[3](即 Bob)时,您还可以通过调用 jobs[3] 来显示 Bob 有 1 份工作...