【发布时间】:2011-01-09 02:31:20
【问题描述】:
我正在编写一个半简单的数据库包装类,并希望有一个可以自动操作的获取方法:它应该只在第一次准备每个不同的语句,然后绑定并执行查询连续调用。
我想主要问题是:重新准备相同的 MySql 语句如何工作,PDO 会神奇地识别语句(所以我不必)并停止操作? p>
如果不是,我打算通过为每个不同的查询生成一个唯一键并将准备好的语句保存在数据库对象的私有数组中 - 在其唯一键下。我打算通过以下方式之一获取数组键(我都不喜欢)。按优先顺序:
- 让程序员在调用方法时传递一个额外的、始终相同的参数 - 类似于
basename(__FILE__, ".php") . __LINE__的内容(此方法仅在我们的方法在循环中调用时才有效 - 大多数情况下都是如此需要此功能) - 让程序员传递一个完全随机的字符串(很可能是预先生成的)作为额外参数
- 使用传递的查询本身来生成密钥 - 获取查询的哈希或类似的东西
- 通过调用
debug_backtrace实现与第一个项目符号(上图)相同
有没有类似经历的?虽然我为之工作的系统确实值得关注优化(它相当大并且每周都在增长),但也许我什么都不担心,做我做的事情并没有性能优势'我在做什么?
【问题讨论】:
-
我认为将准备好的语句句柄放在一个数组中,以 SQL 为键,是唯一理智的方法。我认为您提出的其他方法没有任何好处。但是,我确实想知道 PDO 是否会自动进行这种优化...
-
但是,如果查询很长并且被调用了数千次,那么在数组中查找这样的键将成为 IMO 自身的瓶颈。
-
我不知道。我可能完全错了。我对 PHP 数组内部的了解不够,也从未测试过这个级别的性能。顺便说一句,在实施一种方法之前测试各种方法的性能,这是个好主意。
标签: php mysql pdo prepared-statement