首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MariaDB LIMIT语句带来的不止是limit

MariaDB LIMIT语句带来的不止是limit
EN

Stack Overflow用户
提问于 2019-07-12 03:27:19
回答 3查看 786关注 0票数 0

我在registrations表上有10,000个用户,希望将我的应用程序中的这个查询限制为3500个用户。但当我调查日志时,有时会发现超过3500个。我不明白为什么这个查询返回的值超过了limit:

代码语言:javascript
复制
select  count(*)
    from  registrations
    where  (selectedtime IS NULL
       AND  expirationtime < NOW()
           )
    LIMIT  3500;

我在DB上手动尝试,有时会看到3500多个

EN

回答 3

Stack Overflow用户

发布于 2019-07-12 04:08:13

您的查询仅返回一行,小于3500行。

如果您想要限制要计数的行数,则需要将其放入子查询中。

代码语言:javascript
复制
SELECT COUNT(*)
FROM (
    SELECT 1
    FROM registrations
    WHERE selectedtime IS NULL AND expirationtime < NOW()
    LIMIT 3500) AS x
票数 1
EN

Stack Overflow用户

发布于 2019-07-12 14:26:27

带有COUNT的SELECT语句返回SELECT语句检索到的行数。

出于性能原因,期望的结果是限制该计数。在SELECT语句中包含LIMIT子句将不起作用,因为它只限制返回的行数,而返回的行数始终为1。

我称之为“有限计数”的解决方案是通过限制非计数SELECT语句并将其包装在COUNT(*)中来实现的。

例如:如果你的count语句看起来像这样

代码语言:javascript
复制
select count(*) from registrations where (selectedtime IS NULL AND expirationtime < NOW()) LIMIT 3500;

可以通过将查询替换为以下内容来限制结果:

代码语言:javascript
复制
SELECT COUNT(*) AS total
FROM (
    SELECT 1
    FROM registrations
    WHERE selectedtime IS NULL AND expirationtime < NOW()
    LIMIT 3500) AS x

如果需要知道非count SELECT语句在没有限制的情况下会返回多少行,可以使用信息函数FOUND_ROWS()。它将获取总行数,而无需再次运行该语句。

票数 0
EN

Stack Overflow用户

发布于 2019-07-12 14:33:52

这做了您认为您正在做的事情:

代码语言:javascript
复制
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/ )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56996085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档