如何估计 mysql 搜索查询中的行数?

Had*_*deh 5 mysql sql

当您在 gmail 中搜索单词 gmail 时,请输入:\n1\xe2\x80\x9320 约 98

\n\n

98 是估计值 我怎样才能在我们的搜索中使用 mysql 来做到这一点?

\n\n

我不想使用COUNT函数,或者SQL_CALC_FOUND_ROWS因为我有 1M 行并使用搜索fulltext。\n我想估计不算!

\n

Cod*_*ale 8

如果countSQL_CALC_FOUND_ROWS没有帮助你有一些选择:

  1. 询问信息_架构表
select  table_rows
from    information_schema.tables
where   table_schema = 'database_name'
  and   table_name = 'table_name' ;
Run Code Online (Sandbox Code Playgroud)

估计但性能非常好。

  1. counter将其他表中的值外部化并在插入/删除语句期间更新它(性能更高、更准确,但会增加写入语句的开销)

  2. 应用程序中的缓存计数器(我们可以想象有一种后台工作程序,每 30 分钟获取“更新”值并更新缓存中的值)该服务将始终使用缓存值

解决方案 1 和 3 是关于estimates但不要忘记棘手的部分(使用过滤列进行计数..所以使用where子句)...解决方案 1 不再有帮助,解决方案 2 和 3 将需要counter基于某些“静态”来维护多个过滤”就像count() where sexe='M'...

最后使用随机过滤器值..你被卡住了..并且你需要使用count具有最佳索引的目标表上的选项(或者可能尝试在全文搜索(如弹性搜索)中索引数据)