哪个更快:在循环中调用mysql,或者在单个结果集中循环


Which is faster: calling mysql in a loop, or looping through a single result set

我正在处理一个表,并像在forloop 中一样频繁调用mysql数据库

首先,我的MYSQL表是toooooooooo-biGGGGGG

我打电话给

    for ($i=0; $i < count($pages); $i++) {
        array_push($views, $this->get_page_views($domain, $pages[$i]));
    } // get_page_views is a function where i select data from table accourding to page

我认为我不应该对数据库做那么多调用,或者我应该使用

//selecting all rows and coloumns and then i should process them through php
//select * from page views 
//and process them independently

我的问题是哪个最好

目前还不清楚您的代码到底在做什么,但如果您的循环在每次迭代中都打开了一个新的连接,那么效率真的很低。编写客户端代码时应尽量减少其访问数据库的次数,如果需要在短时间内进行大量查询,则应打开连接,进行查询,然后关闭连接。

根据猜测,从有限的信息来看,你甚至可以在一个查询中完成,这甚至更好。通常,每个迭代都有一个带有查询的循环,这表明某些东西需要重构为单个查询。

我很怀疑你的MySQL表是"toooooooooobiGGGGGG"。如果在正确的字段上有正确的索引,它应该能够轻松地处理数千万行。如果它表现不佳,那么以下其中一个很可能是真的:

  1. 你没有正确地整理索引
  2. 您正在编写效率低下的查询(如上所述)
  3. 您的数据结构不正确(未规范化等)
  4. 地球上每个人都有十排

当要处理的表是已知的或静态的时,在循环中建立连接并关闭不是一个好主意。

在这种情况下,您可以运行一次查询,并将结果存储在数组(如果是php)或ResultSet(如果是Java)中,也可以使用HashMap或Dictionary等集合来处理它们。

其想法是在之前缓存结果以提高性能。