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

时间:2014-08-27 05:23:43

标签: mysql sql

当你在gmail中搜索单词时,gmail说: 1-20 of about 98

98是估计值我如何在搜索中使用mysql执行此操作?

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

2 个答案:

答案 0 :(得分:2)

也许你可以使用表格的大小(磁盘大小)。

尝试进行如下查询:

SELECT DATA_LENGTH + INDEX_LENGTH
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME='...';

http://dev.mysql.com/doc/refman/5.1/en/tables-table.html

答案 1 :(得分:1)

如果countSQL_CALC_FOUND_ROWS对您没有帮助,则有一些选择:

  1. 询问information_schema表
select  table_rows
from    information_schema.tables
where   table_schema = 'database_name'
  and   table_name = 'table_name' ;

不错,但表现很好。

  1. counter的值外部化到另一个表中,并在插入/删除语句期间对其进行更新(性能更高,更准确,但会增加写语句的开销)

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

解决方案1和3大约是estimates,但不要忘记棘手的部分(使用过滤后的列进行计数..因此,where子句)...解决方案1不再有用,解决方案2和3需要根据counter等一些“静态过滤”来维持多个count() where sexe='M' ...

最后使用随机过滤器值..您被卡住了..并且您需要在目标表上使用count选项以实现最佳索引(或者尝试通过全文搜索为数据建立索引)像弹性搜索)