哪一个更好:使用SQL或PHP过滤?

时间:2011-06-05 17:16:47

标签: php sql

情况:

每个用户只能看到某个国家/地区和某个代理商的销售报告。

那么,哪一个更好:

$reports = $DB->select('fields'=> '*',
                      'table'=>'sales',
                      'where'=>array(
                             'sales_date'=>array(
                                  '2011-06-02', '2011-06-04'),
                             'sales_country'=>array_keys($allow_country),
                             'sales_agent'=>array_keys($allow_agent)
                      ));

或者:

$result = $DB->select('fields'=> '*',
                      'table'=>'sales',
                      'where'=>array(
                             'sales_date'=>array(
                                  '2011-06-02', '2011-06-04')
                      ));

while (($row=mysql_fetch_assoc(result)) != null) {
 if (array_key_exists($row['country'], $allow_country) && array_key_exists($row['agent'], $allow_agent){
  $reports[] = $row;
 }
}

在良好做法和处理时间方面?

注意:我的DB类使用php prepared statement。

6 个答案:

答案 0 :(得分:7)

数据库针对这类事情进行了优化。不要在代码中这样做。

答案 1 :(得分:5)

这里至少有两个不同的问题:

  • CPU时间。正如其他人所说,您可能会发现数据库更擅长执行此类操作。
  • 带宽。第二种方法需要将更大的数据集发送回Web服务器。因此,如果您的数据库服务器和Web服务器是独立的计算机,这可能会降低请求速度。

答案 2 :(得分:1)

数据库将是一个更快的过滤器。

答案 3 :(得分:1)

SQL更快,因为它已优化(可能不是您的代码)并使用索引

答案 4 :(得分:1)

我总是在SQL中尽我所能。为什么要获取比您需要的更多信息?

答案 5 :(得分:0)

在某些罕见的情况下,人们会在代码中执行此操作而不是在SQL中执行此操作。例如,数据库可能位于高速缓存后面,因此为了保持高速缓存不那么混乱,可以对高速缓存的查询结果应用额外的过滤器。或者像HandlerSocket这样的特定查询引擎可能会限制某些查询。或者数据库可能不是最佳地使用索引,并且由于某种安全限制,开发人员可能无法添加适当的索引。

正如您所看到的,这些案例非常奇怪,因此通常您应该让数据库执行它最擅长的操作。注意你的问题,大多数时候这是一个不好的做法。不要那样做。