- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我了解 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/
如果我想按行(或按列)将函数应用于 ndarray,我是看 ufuncs(看起来不像)还是某种类型的数组广播(不是我要找的)要么?)? 编辑 我正在寻找类似于 R 的应用函数的东西。例如, apply
这里是完整问题的链接:https://youtu.be/5dJSZLmDsxk问题:创建一个函数,返回二维数组中负整数的个数,使得数组中每一行的整数从索引 0 到 n 增加大小,而每一列的整数从上到下
我知道,我知道……停止使用 WISE。这对我来说现在不是一个真正的选择。我们有太多的事情要做,无法编写一个全新的安装程序并更改我们的整个构建过程,而这正是我们必须要做的。 无论如何,问题是我们的卸载
我不知道如何在有限的空间里更好地表达我的问题。这是更好的解释: 我有一个长度为5的String[] test。该类用于编辑test以便在另一个类中可编辑。无论如何,我的构造函数传入要设置为 test
如何手动计算~a?我经常看到这类问题。 #include int main() { unsigned int a = 10; a = ~a; printf("%d\n", a
我目前有一个游戏,我已经为其实现了客户端和服务器。 然后,我让服务器向客户端发送有关其位置的数据,客户端向服务器发送移动输入,等等。 问题是CPU飙升到100%。我已将高使用率直接连接到以下代码,该代
假设我有一个二维数组,例如像这样: val A1 = Array(Array(4,0,0,0),Array(3),Array(3,4,40,1),Array(50,2)) 现在我想在每个位置拥有最多的
我有一个 3d numpy 数组 u,形状 (k, m, n),我正在尝试计算一个新数组 uprod,形状 (k, m, n),这样 uprod[j] = np.dot (A, u[j]),其中 A
可能是重复的,但我找不到任何东西。 我有一个很长的迭代器(10000 个项目),我需要一次迭代约 500 个项目。因此,如果我的迭代器是 range(10000),它将如下所示: Iteration
这个问题在这里已经有了答案: bit-wise operation unary ~ (invert) (5 个答案) 关闭 4 年前。 为什么 bitwise not 没有按预期的方式切换位?请参见
工具提示工作正常,但我想在 Day Wise 之间显示它,而不是在几天之间。目前它正在自由移动,我只想展示它与 JS fiddle 示例一样明智。 最小代码示例。 StackBlitz Code 我希
我有这个问题 library(tidyverse) data_frame(first = c("a", NA, "b"), second = c(NA, "b", NA),
我有这个问题 library(tidyverse) data_frame(first = c("a", NA, "b"), second = c(NA, "b", NA),
我有 2D numpy 数组,示例形状: >>> a.shape (48, 160) 我想在元素之间或每行之间进行简单的操作,例如 a[0] - a[1]但对于所有其他行的每一行。 我知道如何简单地使
我的 table 是这样的 Attendance ---------- Studentid | Date | Status --------------------------------
启用后,eInk Kindles 和一些 Kindle 应用程序会在不常用的单词上方显示定义。例如: 我试图用 标签模拟这个特性,但是当定义比定义的词长时它不起作用。此外,如果您仔细观察屏幕截图,您会
你好,我想在 C++ 中评估一个数学函数(用户定义的),它在一个数组中返回几个值(这个函数是一个基于 vector 的函数 f:R^n->R^m,具有 n 个输入坐标和 m 个输出函数)参数,例如:
我有下面的 HTML 表格,我正在尝试的是“彩色表格标题”在这个例子中必须显示不同的颜色,比如蓝色。Peter、Lois、Joe、Cleveland 应为绿色(与 FistName LastName
在阅读了一些地方之后,我对 SSL 有了一个清晰的认识。但是自学 PHP 开发人员可以从哪里学习如何实现 SSL - 是否有明智的步骤指南? 具体疑问 - SSL 证书将是一个文本文件、一个可安装的应
这个问题在这里已经有了答案: Which is better option to use for dividing an integer number by 2? (22 个答案) 关闭 6 年前。
我是一名优秀的程序员,十分优秀!