mysql 如何实现 count 超过1000条记录 就返回 1000

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 如何实现 count 超过1000条记录 就返回 1000相关的知识,希望对你有一定的参考价值。

mysql 如何实现 以下count功能
比如说我数据库有 users表中有30万条记录
select count(*) from
查询的结果就是30万
我需要实现的功能是
如果超过 1000条记录 返回的结果就是 1000 而不是30万 30万条记录太慢了

其实 这个 百万条记录也不会太慢的,估计你是没有索引。
----
如下是我的登录日志表,四亿记录
你修改一下表名称就可以了,这种无条件查询主要是主键的创建。

SELECT COUNT(*) AS Cnt FROM
(
SELECT
FID
FROM loginlog Limit 0,1000
) A
参考技术A 使用 case when 。
select case when count(*) >= 1000 then 1000 else count(*) end from table

语句大意:当 count(*) >= 1000 显示1000 ,不然就显示 count(*) 记录数。
参考技术B mysql不是有个参数叫limite N N
估计这个能帮上你,可以试下
select count(*) from limite 0 1000追问

朋友 不行啊 用 count了就不能用 limit了

MySQL COUNT 与 LIMIT

【中文标题】MySQL COUNT 与 LIMIT【英文标题】:MySQL COUNT with LIMIT 【发布时间】:2013-06-05 22:18:22 【问题描述】:

我想要做的是对一列求和,但还要对它求和的行数进行计数,限制为不超过 5 行。所以我的查询是:

SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5

我期望返回的是 COUNT(*) 最多为 5(我不能假设它在我的代码逻辑中始终为 5,因为它可能有少于 5 个答案),以及 最多 5行。

相反,我似乎得到的是匹配行的总数(其中用户为 1)作为计数,以及这些行的得分总和。无论我输入LIMIT 1LIMIT 5 还是LIMIT 50,数字都不会改变。

我相信在这种情况下会起作用的是这个

SELECT COUNT(*), SUM(score) FROM (SELECT * FROM answers WHERE user=1 LIMIT 5) AS a

但是对于这样一个简单的查询来说,这似乎有点令人费解,而且由于它在一个高流量脚本中,我希望它尽可能地高效。

我错过了什么吗?几年前我确实找到了this bug report,这似乎与这个“问题”有关,但我假设它实际上不是一个错误?

【问题讨论】:

LIMIT 5 最多返回 5 行。 SELECT COUNT(*), SUM(score) FROM answers 将返回 1 行。 1 是的@ta.speot.is,我想我只是需要有人来验证我没有做愚蠢的事情。可以发誓有一个更简单的查询来做我需要的事情,但显然不是。 在嵌套查询中使用select 1而不是select *理论上可以减少内存使用 【参考方案1】:

这实际上是您的查询的工作方式,并且是正常行为。使用LIMIT 您将不会限制计数或总和,而只会限制返回的行。因此,您的查询将返回 n 行,如您的 LIMIT 子句中所述。而且由于您的查询实际上只返回一行,因此应用(非零)限制对结果没有影响。

但是,您的第二个查询将按预期工作,并且是解决此问题的既定方法。

【讨论】:

一旦 SO 计时器允许我接受您的回答。但你是对的,我想我只是需要别人来解释一下,所以我知道我没有做傻事。第二个查询确实有效,而且似乎是唯一的方法。

以上是关于mysql 如何实现 count 超过1000条记录 就返回 1000的主要内容,如果未能解决你的问题,请参考以下文章

MySQL count(*) 性能优化

mysql如何做分页查询?

Mysql如何使用count函数更新n行?

PHP PDO - 关闭语句 - 不能创建超过 max_prepared_stmt_count 语句

world count

do...while和while...do的两种场景比较