2014-10-31 58 views
-2

我处理的表格和进行频繁调用mysql数据库就像一个for循环这是更快:调用MySQL的一个循环中,或通过一个单一的结果集循环

第一件事情里面,,我的MySQL表是tooooooooo 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 

我的问题是哪一个是最好的

+0

显示DB代码以及访问SQL PDO或Normal的方式? – 2014-10-31 14:28:27

+0

最好的是编写可维护的代码,该代码有效并且很有弹性。你的看起来没有那个。而且,你还没有包括相关的部分,但我敢打赌你会在这个循环中打开和关闭连接。 – 2014-10-31 14:28:36

+0

我已更新检查它我没有关闭连接在循环 – 2014-10-31 14:32:54

回答

1

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

根据猜测,从有限的信息去,你甚至可以在一个查询中做到这一点,甚至更好。通常,每个迭代都会有一个查询循环,这表示需要重构某个查询。

我严重怀疑你的MySQL表是“tooooooooo biGGGGGG”。它应该能够舒适地处理数千万行,如果你在正确的领域有正确的索引。如果表现糟糕,那么以下情况之一很可能是:

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

请参阅其分析系统,我向用户提供关于他的域名的全部详细信息,因此我应该选择该域名的所有行 或 我应该打电话给我需要的东西 – 2014-10-31 15:19:13

+0

@NaveenSinghraghuvanshi您的另一个目标应该是避免不必要的网络流量,因此,如果您可以准确检索您所需的内容而不再需要其他内容,请执行此操作。获取数据库为您完成繁重的工作。 – 2014-10-31 15:23:39

1

当处理的表格已经是已知的或静态的时候,在循环中进行连接和关闭并不是一个好主意。在这种情况下,您可以运行一次查询并将结果存储在数组(如果是php)或结果集中(如果它是Java),或者您可以使用HashMap或Dictionary等集合并处理它们。

这个想法是缓存结果以提高性能。

+0

我已更新问题 – 2014-10-31 14:32:27

相关问题