只需执行一次主查询的分页实现

论坛首页 论坛 经验分享 只需执行一次主查询的分页实现

标签: 

正在查看 2 条回复
  • 作者
    帖子
    • #20146
      孙锡源
      管理员
        @ibadboy
        楼主
        坏蛋的博客
        ibadboy.net

        这次又是我孤陋寡闻了。

        优化WooCommerce的慢查询的时候发现他的查询语句带了SQL_CALC_FOUND_ROWS关键字,好陌生。

        详细了解后发现是个神器。

        以往做分页基本要写以下两条SQL:

        SELECT COUNT(*) from [table] WHERE  ......;
        SELECT * FROM [table]  WHERE ...... limit M,N;

        这将执行两次主查询,而使用SQL_CALC_FOUND_ROWS之后则可以这样写:

        SELECT SQL_CALC_FOUND_ROWS * FROM [table] WHERE ......  limit M, N;
        SELECT FOUND_ROWS();

        虽然SQL语句也是两条,但是在第一条查询执行后会将行数保存下来,第二条SQL相当于直接取数值,这样就比之前的方案快非常多。

      • #20147
        不凡
        版主
          @edipse
          wp.bufanz.com

          这是用WooCommerce插件可以用到的吗?

          • #20148
            孙锡源
            管理员
              @ibadboy
              楼主
              坏蛋的博客
              ibadboy.net

              是WooCommerce默认的查询方法,没啥问题,只是留个笔记而已,普通用户不用管。

          • #24758
            耗子
            管理员
              @haozi
              耗子博客
              hzbk.net

              不认可,这个SQL_CALC_FOUND_ROWS在大数据量下非常慢,是WordPress众多慢查询的核心之一。

          正在查看 2 条回复
          • 哎呀,回复话题必需登录。