2013-07-05 13 views
1

回过头来,一位数据库管理员向我提到,一些服务器端程序员不会经常使用SQL。例如,当它进行基于时间的计算时,他声称SQL更适合。在PHP或MySQL中日期计算更快吗?

我没有给予太多的考虑,因为它并没有真正影响我在做什么。但是,现在我正在进行相当长时间的计算。通常,我在过去曾使用过PHP。为了表现,我很好奇SQL会更有效率。

例如,这些都是一些任务,我一直在做:

 $todaysDate = date("d-m-Y"); 
     $todayStamp = strtotime($todaysDate); //Convert date to unix timestamp for comparison 
     $verifyStamp = strtotime($verifyDate); //Convert submitted date to unix timestamp for comparison 

     //The date comparison 
     if((strtotime($lbp) <= $verifyStamp) && ($verifyStamp <= $todayStamp)){ 
      return true; 
     } 
     else { 
      $invalid = "$verifyDate is outside the valid date range: $lbp - $todaysDate."; 
      return $invalid;    
     } 

的变量并不是那么重要 - 它只是为了说明,我进行比较,将时间设置为当前日期等

如果我要将部分或全部这些任务转换为SQL,会有好处吗?请注意,我与我的数据库的连接是通过PDO,我通常必须创建一个新的连接。另外,我的日期计算通常会被插入到数据库中。所以,当我说我正在做的比较或添加时间当前日期,我的意思是我加入从他们无论结果查询之前进行这些计算:

$result = something...INSERT INTO table VALUE = $result

的计算可以同样容易INSERT INTO table VALUE = DATE_ADD(...

任何输入表示赞赏。

+1

为什么不建立一个测试和时间呢? – webnoob

+0

个人而言,我喜欢在最终用户的计算机上尽可能多地进行计算(假设他们已启用JavaScript) – Strawberry

+0

尽可能使用PHP进行计算,但不要从数据库中获取比所需更多的行。 Web服务器比数据库服务器更容易多个数据库,因此数据库负载应该保持最小。 – anttir

回答

4

与数据库交谈的开销会否定它可能或可能没有的任何和所有优点。这很简单:如果你使用PHP,则使用PHP进行计算。如果您要计算的数据在数据库中,请在数据库中执行。不要只是因为除非你真的可以证明它为你节省了大量的时间(很可能不会),而是在系统之间转换。你所展示的是任何一个系统中的儿童游戏,它几乎没有像现在这样快得多。

+0

我想的很多。这就是为什么我说我必须每次都建立一个新的连接。 – Mlagma

0

需要考虑的一件事是您正在执行多少日期计算以及转换发生在查询中的哪个位置。如果您正在搜索1000万条记录的数据库,并且您将每个单条记录的DateTime字段转换为WHERE子句中的一个Unix时间戳,并且只会在查询结果中记录100条记录,那么使用SQL在1000万条记录上执行该转换,而不是使用PHP将DateTime对象转换为仅得到的100条记录的Timestamp。

当然,如果将转换放在select语句中,只有100条记录的结果将被转换,因此它几乎相同。

+0

所以你建议从数据库读取1000万行到php来做计算? – DevZer0

+0

绝对不是!如果可能的话,我可以使用其他关键字进行搜索,或者使用实际的DateTime字符串进行搜索。我试图做的一点是,将查询中的日期转换放置在查询的资源成本上会产生很大影响。如果您绝对必须(出于某种奇怪的原因)将每行的值从DateTime转换为整数,那么在数据库中执行它肯定会更容易。 –

1

那么当你考虑使用任何编程语言的SQL,那么使用SQL比任何其他语言更适合计算。

如果你考虑Php和SQL,那么我想告诉你我从我的分析中意识到什么。

PHP架构是一种客户端 - 服务器架构,即客户端发送一个HTTP请求到服务器和服务器的HTTP响应

一个服务器的背面返回给客户端的响应,服务器会生成一个简单的HTML格式页面,该页面是静态的,该页面是使用服务器上PHP的动态代码生成的。

现在的总时间是:

HTTP请求 + SQL查询从SQL数据的SQL查询 + 数据操作 + 获取数据 + 腓到HTMLGeneration + HTTP响应

但是,如果您使用SQL查询本身内的计算完成时间为在PHP中的数据操作的SQL将被保存。由于Php将不得不明确处理数据。

所以总时间将是:

HTTP请求 + SQL查询 + 获取数据的SQL查询 + PHP-到HTMLGeneration + HTTP的响应

如果您处理的数据量较少,这可能看起来几乎相等。但对于例如,如果你正在处理一个查询中的行然后其中将运行1000时将更多的时间比运行这将计算完成1000行的一个查询消费PHP只需一个命令。

+1

工作必须完成*某处*。如果你在数据库中这样做,那么数据库查询会慢一点。可能不那么明显,但如果使用PHP进行计算,则这两者也不会很明显。 – deceze

+0

@deceze:我试了一下..我做了一个200x200的数组,并且元素被保存在数据库中,这是我总共有40,000个元素,并且在每个查询中有81行被拉出。SQL端的计算明显比获取查询和在PHP端进行数据操作要快得多。 –

+1

当然,我没有说你永远不应该在数据库中这样做。但你确实需要一个很好的理由。如果数据来自数据库,请尽可能在数据库中使用它。但似乎OP正在考虑在数据库中计算非数据库中的数据。 – deceze