gpt4 book ai didi

php - 我应该在 PHP PERFORMANCE-WISE 中为 MySQL 使用准备好的语句吗?

转载 作者:IT老高 更新时间:2023-10-28 23:49:59 27 4
gpt4 key购买 nike

我了解 MySQL 中预准备语句的安全优势。无需在这里讨论该主题。我想知道它们的性能方面。

现在,我知道当使用预准备语句的查询在单个 PHP 脚本中执行两次时,它会更快,因为查询只解析一次,每个查询一次。客户端进行一次准备,然后使用二进制协议(protocol)发送两次数据。二进制协议(protocol)速度更快,而且您不会受到第二次解析的影响。

但是,如果我只想在单个 PHP 脚本中执行一次查询,该怎么办?使用准备好的语句似乎更糟,因为您要两次访问服务器,一次是准备,一次是发送数据。只需要解析一次的好处就失去了,而且你会因为第二次旅行而受到惩罚。如果二进制格式的数据不够小,那么使用准备好的语句就会失败,对吧?

但是,我已经阅读了一些关于 PHP 的 mysqli 或 PDO 库的作用的相互矛盾的报告?它们中的任何一个是否在脚本执行期间缓存准备好的语句?服务器是否必须在后续页面加载时再次解析准备好的语句?如果答案是否定的,即不必在第二次页面加载时解析该语句,那么准备好的语句似乎更好,即使每次页面加载只执行一次查询。

请考虑 MySQL 版本之间是否有任何关于此的更改。你可以放心地假设我使用的是 PHP 5.2

编辑:为了清楚起见,我想要一个专门针对 MySQL 和 PHP 的答案,指定 MySQL 版本以及是否有所不同,并且只考虑性能,而不是易用性或安全性。

更新:我接受了我所做的答案,因为后续评论有一些好主意。我仍然有点失望,似乎没有人能够肯定地回答我提出的实际问题的症结所在。我想有时候答案真的是“视情况而定”。

最佳答案

历史

这是我的第一个 Stackoverflow 答案。从那以后发生了很多变化,特别是 mysql API 的弃用和删除。即使您仍在使用 php 5.6,也不应使用 mysql_* api。现在 PDO 或 mysqli 是唯一可供选择的选项。 PDO 更好的原因有很多。

准备好的语句是否在页面加载时缓存?

I've read some conflicting reports about what PHP's mysqli or PDO libraries do? Do either of them cache the prepared statement across script execution?

在页面加载之间不会使用相同的预处理语句。每次都必须做好准备。如果挤压每一个大毫秒很重要,那么存储过程可能是一个好主意(假设您有一个复杂的查询)。

对于大型插入(数千行),通过将数据转储到文本文件并使用 LOAD DATA IN FILE 加载它可能会获得更大的提升。这比一系列插入要快得多。

原来的答案

事情的真相是,有时mysqli更快,有时mysql api更快。但是差别真的很小。如果您查看网络上的任何性能测试,差异实际上只有 10 到 20 毫秒。提高性能的最佳方法是优化表设计。

许多“证明”旧 api 更快的测试很方便地忘记了为获得最大安全性,应该为查询中使用的每个变量调用 mysql_real_escape_string()。

当且仅当查询中使用的所有表上的数据保持不变时,查询才会被服务器缓存。

等待实际数字的另一次更新

关于php - 我应该在 PHP PERFORMANCE-WISE 中为 MySQL 使用准备好的语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2214408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com