PDO 库是不是比原生 MySQL 函数更快?
Posted
技术标签:
【中文标题】PDO 库是不是比原生 MySQL 函数更快?【英文标题】:Is the PDO Library faster than the native MySQL Functions?PDO 库是否比原生 MySQL 函数更快? 【发布时间】:2012-04-03 23:04:24 【问题描述】:我已经阅读了几个与此相关的问题,但我担心它们可能已经过时,因为自从这些问题得到解答后,新版本的 PDO 库已经发布。
我编写了一个 mysql 类,它构建查询和转义参数,然后根据查询返回结果。目前这个类使用的是内置的mysql函数。
我很清楚使用 PDO 库的优势,例如它与其他数据库兼容,存储过程更易于执行等...... 但是,我想知道的很简单;使用 PDO 库是否比使用 mysql 内置函数更快?
我刚刚为 MsSQL 编写了等效的类,因此重写它以适用于所有数据库根本不会花费我很长时间。值得还是 PDO 库更慢?
【问题讨论】:
这是一个有趣的问题...我一直使用 PDO 只是因为一件事...存储过程...我没有检查速度...但是存储过程对我来说已经足够了:P。存储过程总是会增加 Web 应用程序的安全性,因为如果你使用它们,就没有“我忘记了mysql_real_escape_string()
调用”的地方:)。
如果您知道 PDO 的 许多 其他优势,但只关心速度,为什么不直接对其进行基准测试并确定它是否满足您的需求? PDO在很多方面都比较优秀,虽然慢了一点,但还是有优势的。
PDO 比mysql
函数稍慢。但是,mysql
扩展没有准备好的语句。因此,如果您有一个冗长的插入,通过准备好的语句使用 PDO 会快得多,因为您只需将参数发送到已经解析的查询。然而,速度不应该是这里的决定因素。您应该使用 PDO 而不是 mysql
函数。此外,使用 PDO 进行编码要容易得多,而且使用 mysql
东西在 5 到 10 行中完成的工作非常好。
PDO 是一个抽象库,慢一点是正常的(即使差别不大),但你应该选择它,因为它还有其他优点(命名参数、缓冲查询、无需转义等)
感谢您的所有回复!我会自己测试速度,但我没有机会
【参考方案1】:
我发现 PDO 在许多情况/项目中甚至比更多本地模块更快。 主要是因为“PDO 应用程序”中的许多模式/构建块需要较少的 php 脚本驱动代码,而在编译的扩展程序中执行的代码更多,并且在脚本中执行操作时会降低速度。没有数据和错误处理的简单综合测试通常不涵盖这部分,这就是为什么(在其他问题中,例如测量不准确)我认为“10000x SELECT x FROM foo 花费了 10 毫秒的时间”的结论往往没有抓住重点。 我无法为您提供可靠的基准,结果取决于周围的应用程序如何处理数据,但即使是综合测试通常也只会显示出非常微不足道的差异,因此您最好将时间花在优化查询、MySQL 服务器、网络、. .. 而不是担心 PDO 的原始性能。更不用说安全和错误处理了......
【讨论】:
感谢您的回答,这似乎正是我想要的。我并没有真正为 10 毫秒的差异所困扰,没有人会注意到这一点,只要它没有明显变慢,似乎没有。 即使 PDO 与mysql_xxxx
函数比较相同或稍慢,使用 PDO 的好处超过了“传统”替代方案,IMO
@BenCarey ,如果你想对 PDO 进行基准测试,你必须记住,在使用准备好的语句时,你实际上不仅仅是调用查询,还阻止了注入。
至少有一件事 PDO 仍然不能做(如果我没有错过的话),那就是 docs.php.net/manual/en/mysqli-stmt.send-long-data.php 。但我只需要它一次,它是为了解决更深层次的概念缺陷......
@VolkerK 这是我编写自己的类的众多原因之一,因此它允许您使用 PDO 和内置函数来处理不受支持的 PDO 查询。【参考方案2】:
我的观察是 PDO 似乎不太容忍许多连续的连接 - 即在循环中创建的连接。我首先知道这是不好的做法。当我使用 mysql_* 时,我的循环查询似乎相当快。然而,当我切换到 PDO 时,我注意到这些类型的查询的响应时间要长得多。
TL;DR; - 如果您切换到 PDO 并在 PHP 循环中调用查询,您可能需要重写应用程序以调用单个查询而不是多个连续查询。
【讨论】:
以上是关于PDO 库是不是比原生 MySQL 函数更快?的主要内容,如果未能解决你的问题,请参考以下文章