2

不久前,一位数据库管理员向我提到,一些服务器端程序员没有SQL尽可能频繁地使用它们。例如,在进行基于时间的计算时,他声称这SQL更适合。

我没有考虑那么多,因为它并没有真正影响我正在做的事情。但是,现在我正在进行大量基于时间的计算。通常,我过去曾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,并且我通常必须创建一个新连接。此外,我的日期计算通常会插入到数据库中。因此,当我说我正在对当前日期进行比较或添加时间时,我的意思是我在将它们的任何结果添加到查询之前进行这些计算:

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

计算也很容易INSERT INTO table VALUE = DATE_ADD(...

任何输入表示赞赏。

4

3 回答 3

4

与数据库对话的开销将抵消它可能具有或不具有的任何和所有优势。这很简单:如果您使用 PHP,请在 PHP 中进行计算。如果要计算的数据在数据库中,请在数据库中进行。不要仅仅因为除非你能真正证明它可以为你节省大量时间而在系统之间转换(很可能不会)。您所展示的是任何一个系统中的孩子游戏,它几乎没有变得更快。

于 2013-07-05T06:22:55.427 回答
1

好吧,当您将 SQL 与任何一种编程语言一起考虑时,使用 SQL 进行计算比任何其他语言都更可取。

如果您考虑 Php 和 SQL,那么我想告诉您我从分析中了解到的内容。

PHP架构是客户端-服务器架构,即客户端向服务器发送 HTTP-Request,服务器以 HTTP-Response 响应客户端

在服务器的后端,服务器生成一个简单的 HTML 格式页面,该页面是静态的,该页面是使用服务器上的 PHP 的动态代码生成的。

现在总时间是:

HTTP-Request + SQL-Query +从 SQL Query 中获取数据+ SQL 数据的数据操作+ Php-to-HTMLGeneration + HTTP-Response

但是,如果您使用在 SQL 查询本身内完成的计算,那么将节省在 php 中对 SQL 进行数据操作的时间。因为 PHP 必须明确地处理数据。

所以总时间是:

HTTP-Request + SQL-Query +从 SQL Query 获取数据+ Php-to-HTMLGeneration + HTTP-Response

如果您处理的数据量较少,这可能看起来几乎相等。但是对于一个实例,如果您在一个查询中处理1000行,那么在 php 中运行 1000 次的循环将比运行单个查询更耗时,后者将在一个命令中计算完整的 1000 行。

于 2013-07-05T06:32:00.147 回答
0

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

当然,如果您将转换放在 select 语句中,那么无论如何只有 100 条记录的结果会被转换,所以它几乎是一样的。

于 2013-07-05T06:27:18.710 回答