【问题标题】:Is there a better way to fetch total count with filters for pagination Mysql?有没有更好的方法来使用分页 Mysql 的过滤器来获取总数?
【发布时间】:2021-07-21 14:18:54
【问题描述】:

目前我正在使用 union 与我的原始查询来获取总计数,以便查询的过滤器也可以应用于计数。 目前我的查询结构是:

SELECT 
    *
FROM
    (SELECT 
        MUI.USERNAME,MUI.NAME,MUI.STATUS,MUI.BILLING_TYPE,MUI.BILLING_SUBTYPE,MSU.USER_NAME AS SELLER_USERNAME,MUA.ADDRESS,MUCN.CONTACT_NUMBER,MUI.CNIC,
            CASE
                WHEN MUI.BILLING_SUBTYPE = 'VAR' THEN 'Variable'
                WHEN MUI.BILLING_SUBTYPE = 'DATE' THEN 'Fixed'
                ELSE MUI.BILLING_SUBTYPE
            END AS BILLING_TYPE_READABLE
    FROM
        USER_INFO MUI
    LEFT JOIN SYSTEM_ENTITY MSE ON MSE.ID = MUI.SELLER_ID
    LEFT JOIN SYSTEM_USER MSU ON MSE.ID = MSU.ENTITY_ID
    LEFT JOIN USER_CONTACT_NUMBER MUCN ON MUCN.ACCOUNT_ID_FK = MUI.ACCOUNT_ID AND MUCN.CONTACT_TYPE = 'PRIMARY'
    LEFT JOIN USER_ADDRESS MUA ON MUA.ACCOUNT_ID_FK = MUI.ACCOUNT_ID
    WHERE
        MUI.SELLER_ID IN (1)
            AND MUI.STATUS <> 'Terminated'
    GROUP BY MUI.USERNAME UNION SELECT 
        'TOTAL_COUNT',FOUND_ROWS(),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) TEMP
ORDER BY CASE
    WHEN USERNAME = 'TOTAL_COUNT' THEN 0
    ELSE 1
END , USERNAME
LIMIT 101 OFFSET 0;

这对我来说很好,但需要太多时间,因为我的 API 在执行期间会抛出超时错误。有没有更好的办法来处理这种情况?

我不希望表中的总行数,我想获取将由上述查询返回的行数,没有限制

【问题讨论】:

    标签: mysql pagination


    【解决方案1】:

    Mysql 对此有一个特殊的功能。做:

    select SQL_CALC_FOUND_ROWS rest of your query with a limit
    

    然后

    select FOUND_ROWS();
    

    如果第一个查询没有限制,则获取将返回的行数。

    然而,从 mysql 8.0.17 开始,这已被弃用,并且可能会从未来的版本中删除。

    【讨论】:

    • SQL_CALC_FOUND_ROWS 的返回时间与我当前使用FOUND_ROWS 的解决方案几乎相同。有没有其他方法可以进一步优化查询?
    • 你不会比select count(*) from (select rest-of-your-basic-query-with-no-limit) foo 更快;如果这太慢了,您所能做的就是尝试改进它:为查询中的所有表添加show create table .... 的问题输出和explain select ... rest-of-your-basic-query-with-no-limit
    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多