MYSQLI 行计算太慢

MYSQLI rows calculate is too slow

我正在尝试用 SQL_CALC_FOUND_ROWS 和 MYSQLI 计算我的 table 上的访问者,但是速度很慢。它超过 15 seconds.What 我可以让它更快吗? 我不得不提一下,我的 table 是 MyISAM,总共有超过 200 万行。

if ($result = $mysqli->query("SELECT SQL_CALC_FOUND_ROWS *  FROM visitors_table WHERE visitor_affiliate= 'first user'")) {
    /* determine number of rows result set */

     $row_cnt = $result->num_rows;

    printf("Result set has %d rows.\n", $row_cnt);

    /* close result set */
    $result->close();
}


 if ($result2 = $mysqli->query("SELECT SQL_CALC_FOUND_ROWS *  FROM visitors_table WHERE visitor_affiliate= 'seconduser'")) {
        /* determine number of rows result set */

         $row_cnt2 = $result2->num_rows;

        printf("Result set has %d rows.\n", $row_cnt2);

        /* close result set */
        $result2->close();
    }

 if ($result3 = $mysqli->query("SELECT SQL_CALC_FOUND_ROWS *  FROM visitors_table WHERE visitor_affiliate= 'thirduser'")) {
        /* determine number of rows result set */

         $row_cnt3 = $result3->num_rows;

        printf("Result set has %d rows.\n", $row_cnt3);

        /* close result set */
        $result2->close();
    }

感谢任何帮助.. 提前致谢!

确保在列 visitor_affiliate:

上有一个索引
CREATE INDEX aff_index ON visitors_table(visitor_affiliate) ;

那么你需要一次查询得到三个结果:

SELECT visitor_affiliate, COUNT(*) AS tot FROM visitors_table 
 WHERE visitor_affiliate IN ( 'firstuser',  'seconduser',  'thirduser')
 GROUP BY visitor_affiliate 

通常比三个查询要快。

如果您还需要单独查询:

SELECT COUNT(*) AS tot FROM visitors_table 
WHERE visitor_affiliate IN = 'firstuser'