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

时间:2014-10-31 14:26:37

标签: php mysql sql

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

首先,我的MYSQL表是太过于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

我的问题是哪个最好

2 个答案:

答案 0 :(得分:2)

目前还不清楚你的代码究竟在做什么,但如果你的循环在每次迭代中都打开了一个新的连接,那真的效率很低。您的客户端代码应该被编写以最小化它需要访问数据库的次数,并且如果它需要在很短的时间内进行大量查询,它应该打开连接,进行查询,然后关闭连接。

据猜测,从有限的信息开始,您甚至可以在一个查询中执行此操作,这甚至更好。通常,对每次迭代进行查询的循环表示某些内容需要重构为单个查询。

我非常怀疑你的MySQL表格是#34;太oo o bi biGGGGGG&#34;。如果你在正确的领域得到了正确的索引,它应该能够舒适地处理数千万行。如果它表现不佳,那么下列之一很可能是真的:

  1. 您还没有正确整理索引;
  2. 您正在编写效率低下的查询(如上所述);
  3. 您尚未正确构建数据(非标准化等);
  4. 这个星球上每个人都有十排。

答案 1 :(得分:1)

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

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

我们的想法是先将结果缓存,以提高性能。