SQL-数据传输时

SQL-数据传输时,sql,fetch,Sql,Fetch,我需要从远程数据库获取大量数据。这个想法是做一种分页,就像这样 1选择第一个数据块 SELECT * FROM TABLE LIMIT 1,10000 2处理该块 while(mysql_fetch_array()...){ //do something } 到下一个街区 等等 假设10000是我的系统允许的维度,让我们假设我要获取30000条记录:我对远程系统执行3次调用 但我的问题是:当执行select时,结果集被传输并存储在某个本地部分,结果是fetch是本地的,或者结果集存储

我需要从远程数据库获取大量数据。这个想法是做一种分页,就像这样

1选择第一个数据块

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
      参数决定行为。
      MYSQLI\u STORE\u RESULT
      的默认值会将整个结果集传输到PHP的内存中,但使用
      MYSQLI\u USE\u RESULT
      会根据请求检索行
在使用或执行查询和检索结果时,PDO默认情况下将根据需要加载数据。
要将结果集中的所有数据检索到PHP数组中,可以使用
准备好的语句也可以使用常量,但建议使用
PDO::fetchALL()



最好还是坚持默认行为,并对任何变化进行基准测试,以确定它们是否真的有任何积极的结果;单独传输结果的开销可能很小,在确定最佳方法时,其他因素可能更重要。

您的DBMS(MySql?)将解决所有这些问题。你为什么要1万,一定是一个大页面!谢谢!感谢其他人回答了我的问题。