gpt4 book ai didi

php - SELECT COUNT() 与 mysql_num_rows();

转载 作者:行者123 更新时间:2023-11-29 19:32:23 24 4
gpt4 key购买 nike

我有一个大表(60+)数百万条记录。

我正在使用 PHP 脚本浏览此表。

PHP 脚本(带分页)加载速度非常快,因为:

表引擎是InnoDB,因此SELECT COUNT()非常慢,并且mysql_num_rows()不是一个选项,所以我保留总行数(我用来生成分页)在一个单独的表中(我在DELETE期间更新此记录total_rows=total_rows-1total_rows=total_rows1+1并且插入)。

但问题是如何处理搜索结果的分页?

现在我正在通过两个步骤来完成此操作:

1.

$condition = " fname='rinchik' ";
$result = "SELECT * FROM my_large_table WHERE" . $condition;

这里我从数据库中获取了所有搜索结果。

2.现在我需要计算这些结果来创建分页。我正在这样做:

$condition; <- we already have this from the step 1
$result_count = "SELECT COUNT(id) FROM my_large_table WHERE" . $condition;

而且速度有点慢。

如果我这样做(只需一步)会更好吗?:

$condition = " fname='rinchik' ";
$result = "SELECT * FROM my_large_table WHERE" . $condition;
$result_count = mysql_num_rows($result);

最佳答案

使用COUNT,服务器内部将以不同的方式处理请求。

在执行COUNT时,服务器只会分配内存来存储计数结果。

当使用mysql_num_rows时,服务器将处理整个结果集,为所有这些结果分配内存,并将服务器置于获取模式,这涉及很多不同的细节,例如锁定。

将其想象为以下伪场景:

选择 COUNT(*)

Hey Bob, how many people are in the class room?

mysql_num_rows

Hey Bob, send all the people from the classroom over to me, ... I'll count them to get the number of people myself

总之,当使用mysql_num_rows时,您将所有记录传输到客户端,并且客户端必须自行计算计数。

关于php - SELECT COUNT() 与 mysql_num_rows();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41716755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com