【发布时间】:2012-07-21 06:58:21
【问题描述】:
我希望在高流量站点上使用准备好的语句来加速一些查询。我认为我没有正确理解的是使用准备好的语句的好处,除非它们可以通过多个连接保持准备状态。看起来这对于也不允许持久连接的 PDO 是不可能的。但持久连接功能不允许 PDO。
为了论证,我每秒运行 5,000 次查询: SELECT * FROM some_table WHERE some_column LIKE 'some_value'
据我了解,如果我每次需要查询时都更改“some_value”,PDO 会阻止 mysql 重新编译和评估查询。我也知道“some_value”可以以二进制而不是 ASCII 传输以节省带宽,但如果我每次打开连接时都必须发送整个查询,它不会节省太多。
根据我的阅读,存储过程也不是解决方案,因为它们也不会通过多个连接保持编译。
这个问题有什么解决办法吗?将准备好的语句存储在服务器上的某个地方,并让它在内存中编译并准备好在收到变量后立即触发?
有没有办法通过将连接池与 PDO 相结合来实现这一点? (虽然我也听说连接池并不理想,因为它会在某些情况下导致阻塞)
【问题讨论】:
-
如果您希望使用持久连接,您必须在传递给 PDO 构造函数的驱动程序选项数组中设置 PDO::ATTR_PERSISTENT。如果在对象实例化后使用 PDO::setAttribute() 设置此属性,驱动程序将不会使用持久连接。
标签: mysql stored-procedures pdo prepared-statement