我在registrations表上有10,000个用户,希望将我的应用程序中的这个查询限制为3500个用户。但当我调查日志时,有时会发现超过3500个。我不明白为什么这个查询返回的值超过了limit:
select count(*)
from registrations
where (selectedtime IS NULL
AND expirationtime < NOW()
)
LIMIT 3500;我在DB上手动尝试,有时会看到3500多个
发布于 2019-07-12 04:08:13
您的查询仅返回一行,小于3500行。
如果您想要限制要计数的行数,则需要将其放入子查询中。
SELECT COUNT(*)
FROM (
SELECT 1
FROM registrations
WHERE selectedtime IS NULL AND expirationtime < NOW()
LIMIT 3500) AS x发布于 2019-07-12 14:26:27
带有COUNT的SELECT语句返回SELECT语句检索到的行数。
出于性能原因,期望的结果是限制该计数。在SELECT语句中包含LIMIT子句将不起作用,因为它只限制返回的行数,而返回的行数始终为1。
我称之为“有限计数”的解决方案是通过限制非计数SELECT语句并将其包装在COUNT(*)中来实现的。
例如:如果你的count语句看起来像这样
select count(*) from registrations where (selectedtime IS NULL AND expirationtime < NOW()) LIMIT 3500;可以通过将查询替换为以下内容来限制结果:
SELECT COUNT(*) AS total
FROM (
SELECT 1
FROM registrations
WHERE selectedtime IS NULL AND expirationtime < NOW()
LIMIT 3500) AS x如果需要知道非count SELECT语句在没有限制的情况下会返回多少行,可以使用信息函数FOUND_ROWS()。它将获取总行数,而无需再次运行该语句。
发布于 2019-07-12 14:33:52
这做了您认为您正在做的事情:
select count(*)
from registrations
where (selectedtime IS NULL
AND expirationtime < NOW()
)
LIMIT ROWS EXAMINED 3500;(从MariaDB 5.5.21开始提供-请参阅https://mariadb.com/kb/en/library/limit-rows-examined/ )
https://stackoverflow.com/questions/56996085
复制相似问题