mysql - 为什么准备好的语句由每个 session 管理?

标签 mysql database postgresql rdbms

为什么准备好的语句由每个 session 管理?

我不确定所有数据库都处理每个 session 的准备好的语句。但是 postgresql 和 mysql(也许)会。

为什么它们不在 session 之间共享?有什么理由吗?

例如, 连接池中有许多连接,连接共享相同的查询并生成相同的准备语句。为什么数据库不允许连接共享准备好的语句?

最佳答案

维护任何共享缓存都是昂贵的 - 你应该保护缓存免受竞争条件的影响,你应该清理缓存,......这是第一个论点。第二个参数更重要——准备好的语句是缓存的执行计划——但这个计划针对一个参数向量进行了优化。当您使用不同参数的向量时,该向量的计划可能又是次优的。有一种理念,因此任何用户都可以使用不同的载体,然后需要不同的计划。使用 session 共享计划缓存不会消除生成计划的开销(尽管这种开销对于快速简单查询来说是最小的),但会消除与共享数据管理相关的开销和竞争条件,并部分降低使用次优准备计划的风险。

关于mysql - 为什么准备好的语句由每个 session 管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279867/

相关文章:

PHP 和 MySQL - 无法从查询中正确分配对象的字段值

mysql - Oracle数据库链接速度有多快?

mysql - 从表中选择除同一表中的某些记录之外的所有记录

c# - 在 MVC 中使用 EF 创建多个数据库并将数据库名称作为 web.config 中的变量传递给 InitialCatalogue

sql - 如何在 SQL 中查询表的层次结构

mysql - 如何将列数据移动到下一行直到从指定键开始结束

sql - 如何优化此查询以摆脱子查询?

PHP mysql 查询临时表不起作用

postgresql - 带有参数的 graphQL 突变给出错误 : validation failed variables are not allowed in scalars

django - 如何在 Django 迁移中执行原始 SQL