PHP PDO : How long are prepared mysql queries cached?

标签 php mysql pdo

如何利用准备好的语句来提高性能?我知道如果我把它放在一个循环中,这样的事情可能会有所帮助:

SELECT `Name` FROM `Hobbits` WHERE `ID` = :ID;

我读到过循环 with 准备好的语句比循环没有准备好的语句要快,但是否则准备好的语句会稍微降低性能。那么 - 这个循环有多大?

如果我在代码的开头运行一个复杂的 SQL 查询,并在末尾使用一个不同的参数重复它——第二个查询会运行得更快吗? (我们为每个页面加载使用一个连接)。缓存查询是否有限制,所以我最好立即重复我的查询?

使用完全相同的参数(重新加载页面或 2 个用户)执行整个脚本两次怎么样?

最佳答案

将准备好的查询提供给 SQL 服务器,SQL 服务器对其进行解析并可能已经准备好执行计划。然后,您基本上会为这些分配的资源提供一个 id,并且只需填写语句中的空白即可执行此准备好的语句。您可以随意运行此语句,数据库将不必重复解析和执行计划,这可能会带来速度提升。

只要您不丢弃声明,就没有关于声明“保持准备状态”多长时间的硬超时。它不是缓存,它是 SQL 服务器上的分配资源。至少只要您的数据库驱动程序在 SQL API 中使用 native 准备好的语句。例如 PDO 默认情况下这样做,除非您将 PDO::ATTR_EMULATE_PREPARES 设置为 false

虽然在脚本执行结束时,所有这些资源将始终被释放,它们不会在不同的页面加载中持续存在。除此之外,无论客户端脚本如何,SQL 服务器可能会或可能不会缓存查询及其结果一段时间。

关于PHP PDO : How long are prepared mysql queries cached?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22459793/

相关文章:

php - 图片上传后无法显示

php - 通过带有帖子导航的 AJAX 加载帖子

mysql - 选择每组计数项目

php - 在 PDO 中输出选择查询

php - 如何保存具有特定文件大小的图像?

php - 递归解析php

mysql - 如何在 MySQL 上不使用 HAVING 进行 COUNT 或类似操作?

php - Order by before Group by 子查询

php - 在 PDO 中使用 ON DUPLICATE KEY UPDATE

php - 在 php pdo mysql 中登录网站时如何显示用户个人资料和所有用户信息?