我正在尝试使用 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/