SQL-数据传输时
我需要从远程数据库获取大量数据。这个想法是做一种分页,就像这样 1选择第一个数据块SQL-数据传输时,sql,fetch,Sql,Fetch,我需要从远程数据库获取大量数据。这个想法是做一种分页,就像这样 1选择第一个数据块 SELECT * FROM TABLE LIMIT 1,10000 2处理该块 while(mysql_fetch_array()...){ //do something } 到下一个街区 等等 假设10000是我的系统允许的维度,让我们假设我要获取30000条记录:我对远程系统执行3次调用 但我的问题是:当执行select时,结果集被传输并存储在某个本地部分,结果是fetch是本地的,或者结果集存储
SELECT * FROM TABLE LIMIT 1,10000
2处理该块
while(mysql_fetch_array()...){
//do something
}
到下一个街区
等等
假设10000是我的系统允许的维度,让我们假设我要获取30000条记录:我对远程系统执行3次调用
但我的问题是:当执行select时,结果集被传输并存储在某个本地部分,结果是fetch是本地的,或者结果集存储在远程系统中,并且在任何fetch中逐个记录?因为如果真正的场景是第二个,我不会执行3次呼叫,而是30000次呼叫,这不是我想要的
我希望我能解释清楚,谢谢你的帮助
再见您将执行3次呼叫,而不是30.000次。那是肯定的 每个10.000个结果批在服务器上呈现(通过执行3个查询中的每个查询)。您的while遍历MySQL已经返回的一组数据(这就是为什么您没有30000个查询) 假设你会有这样的东西:
$res = mysql_query(...);
while ($row = mysql_fetch_array($res)) {
//do something with $row
}
通过使用$row
在while
循环中执行的任何操作都与已从初始查询中获取的数据有关
希望这能回答您的问题。根据文档,所有数据都会被提取到服务器,然后您就可以查看了 从页面:
返回与获取的行相对应的字符串数组,如果没有更多行,则返回FALSE。
此外,这是不推荐使用的,因此您可能希望使用此处建议的其他功能。首先,强烈建议使用MySQLi或PDO,而不是不推荐使用的
mysql.*
函数
默认情况下,mysql和mysqli扩展在执行查询时会将整个结果集加载到PHP内存中,但如果需要或需要,可以更改为在检索行时按需加载结果
- mysql
- 在PHP内存中缓冲整个结果集
- 仅在请求行时从数据库检索数据
- mysqli
参数决定行为。$resultmode
的默认值会将整个结果集传输到PHP的内存中,但使用MYSQLI\u STORE\u RESULT
会根据请求检索行MYSQLI\u USE\u RESULT
要将结果集中的所有数据检索到PHP数组中,可以使用
准备好的语句也可以使用常量,但建议使用
PDO::fetchALL()
最好还是坚持默认行为,并对任何变化进行基准测试,以确定它们是否真的有任何积极的结果;单独传输结果的开销可能很小,在确定最佳方法时,其他因素可能更重要。您的DBMS(MySql?)将解决所有这些问题。你为什么要1万,一定是一个大页面!谢谢!感谢其他人回答了我的问题。