|
1
12
历史这是我的第一个答案。此后发生了很多变化,特别是mysql API的弃用和删除。即使您仍然使用PHP5.6,也不应该使用mysql_*api。现在,PDO或mysqli是唯一的选择。PDO有很多优点。 准备好的语句是否跨页面加载缓存?
相同的预处理语句不会在页面加载之间使用。每次都要准备好。如果压缩每一个大毫秒都很重要,那么存储过程可能是一个好主意(假设您有一个复杂的查询)。 对于大型插入(数千行),通过将数据转储到文本文件并在文件中加载数据,可能会获得更大的提升。它比一系列插入要快得多。 原始答案事实是,有时候mysqli更快,而有时候mysqlapi更快。但是差别真的很小。如果你看一下网络上的任何性能测试,差别实际上只有10-20毫秒。提高性能的最佳方法是优化表设计。 许多“证明”旧api更快的测试都很方便地忘记了,为了获得最大的安全性,应该为查询中使用的每个变量调用mysql\u real\u escape\u string()。
等待另一个实际数字的更新 |
|
|
2
8
“使用事先准备好的语句从来都不是一个好主意”
预处理语句是专门为业务逻辑中的紧密内部循环而设计的,在业务逻辑中,您将反复调用相同的基本查询,一个很好的示例是参数化查询,例如:
每次通话你都有不同的身份证。这样,为prepare额外往返db是值得的,因为您可能会调用它数百次或数千次,只需更改参数。但是您需要从缓存中删除准备好的语句,或者在无状态脚本(php、perl、jsp、ruby等)的末尾关闭连接。
|
|
|
3
1
更慢的 而不是手动构造的查询 即使它反复运行 . 例如,当我需要在一个页面加载中插入数百行时,我发现:
更新4年前我写了这个答案,从那以后我学到了新的东西。 为了使准备好的语句能够快速地重复运行数百次,您必须将所有执行都打包在 一笔交易 . 然而,我从未测试过哪一种更快,非准备的单批插入,1000行或1000次准备好的插入被包装在一个事务中执行。 |
|
|
4
0
使用事先准备好的语句从来都不是一个好主意。我最近没有在mySQL中使用它们,但我在SQLSERVER中大量使用了它们——它们工作得很好。 PDO库可能不进行任何缓存,但数据库将为准备好的语句进行缓存。 另外,当你报道时,它们非常安全。将这种逻辑从代码中推出来也很好——您不会在整个应用程序中使用SQL。 |
|
|
5
0
“在第二页加载时解析”到底是什么意思? 再次执行同一脚本的每个PHP进程/线程/访问者不会阻止MySQL重新解析查询以准备语句,因为它在每个连接的基础上都是有效的,因此对于在同一脚本中重复的查询非常有效。 现在,我不能争论prepare+execute与简单查询、性能方面(没有重复查询);
但是,为了避免mysql在每次执行脚本时解析复杂查询,您应该使用存储过程;一个查询将是公正的
|
|
|
Bard.Mus · 迁移后的数据库字符集环境 1 年前 |
|
Efannnnnn · 将Id数据存储到任何页面 1 年前 |
|
|
yooooo · 用于在块中删除的存储过程-LOOP未执行 1 年前 |
|
John Beasley · 更新一定数量记录的连续日期 1 年前 |
|
|
ColinM · MySQL以前的结果查询返回不正确的值 1 年前 |
|
Sergey_Z · MySQL只需无条件连接2个表和交叉连接 1 年前 |