Mysql计数上限(*)

Mysql计数上限(*),mysql,optimization,count,limit,Mysql,Optimization,Count,Limit,我有一个问题: select count(*) from `table` where `something`>123 如果表中有几百万条记录,那么即使列某物上有索引,查询也会运行得非常慢。然而,事实上,我对以下价值感兴趣: min(100000, count(*)) 那么,当MySQL已经找到10万行时,有没有办法阻止它计算行数呢?我发现了类似于: select count(*) from (select 1 from `table` where `something`>123

我有一个问题:

select count(*) from `table` where `something`>123
如果表中有几百万条记录,那么即使列某物上有索引,查询也会运行得非常慢。然而,事实上,我对以下价值感兴趣:

min(100000, count(*))
那么,当MySQL已经找到10万行时,有没有办法阻止它计算行数呢?我发现了类似于:

select count(*) from (select 1 from `table` where `something`>123 limit 100000) as `asd`
如果表中有几百万个匹配项,则比count*快得多,但当匹配项少于100000个时,count*的运行速度要快得多


有什么办法可以更快地完成吗

可能有助于更好地利用值范围限制

select count(*) - (select count(*) from t where something <= 123) as cnt
from t

另一件事可能是有一个更新触发计数。

我没有评论的要点,所以我将此作为一个答案发布

你有没有试着用它来看看你的索引是否真的被使用了?听起来这个查询正在执行一个任务。理想情况下,你会希望看到这样的东西:使用where;使用索引。 出于好奇,某个字段是否可以为空? 另一方面,也许查询优化器在以下方面会做得更好:

select count(*) as cnt
from table
where something > 123
having count(*) > 100000

我假设这是一个输入错误,一个限制是123,另一个限制是23。什么样的列是什么?你在用InnoDB吗?这是MyISAM表。我们可以假设这个列是一个int,但它与这个问题完全无关。这只是一个想法,所以我不会给出答案,但是关于countid呢,其中id是一个不同索引列的名称?我知道这有时会更快,但有时与其他DBs不同。