php - MYSQLI 行计算太慢

标签 php mysql mysqli count rows

我正在尝试使用 MYSQLI 使用 SQL_CALC_FOUND_ROWS 计算表上的访问者,但速度很慢。超过 15 秒。我该怎么做才能让它更快? 我不得不提一下,我的表是 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'

关于php - MYSQLI 行计算太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30470907/

相关文章:

javascript - 授予成功后无法订阅 channel

php - mysqli 中的 Echo 脚本警报

php - 在 PHP 外壳内部服务器错误中设置手动字符集

php - 带有条件的mysql查询计数,结果为数字

php - 在 MySQL 查询中传递 php 变量

php - PHP插入带引号的mysqli

php - PHP 5.4 的编译器当前状态如何?

php - 在 tumblr 主题中显示当前年份

php - MySQL PHP 选择 "X,Y"位于 X,Y,Z 中的位置

sql - 是否可以从我的 MySQL 数据库中的一个表中的一行中获取值并插入到同一数据库中的另一个表中?