为什么准备好的语句由每个 session 管理?
我不确定所有数据库都处理每个 session 的准备好的语句。但是 postgresql 和 mysql(也许)会。
为什么它们不在 session 之间共享?有什么理由吗?
例如, 连接池中有许多连接,连接共享相同的查询并生成相同的准备语句。为什么数据库不允许连接共享准备好的语句?
最佳答案
维护任何共享缓存都是昂贵的 - 你应该保护缓存免受竞争条件的影响,你应该清理缓存,......这是第一个论点。第二个参数更重要——准备好的语句是缓存的执行计划——但这个计划针对一个参数向量进行了优化。当您使用不同参数的向量时,该向量的计划可能又是次优的。有一种理念,因此任何用户都可以使用不同的载体,然后需要不同的计划。使用 session 共享计划缓存不会消除生成计划的开销(尽管这种开销对于快速简单查询来说是最小的),但会消除与共享数据管理相关的开销和竞争条件,并部分降低使用次优准备计划的风险。
关于mysql - 为什么准备好的语句由每个 session 管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279867/