sne*_*egi 9 java mysql jdbc hikaricp
我读到MySQL不支持服务器端查询计划缓存.因此,如果我想使用PreparedStatements获得性能优势,我可以做的是在JDBC Connection中启用语句缓存.因此,根据文档,它将支持基于每个连接缓存预准备语句.
与MySQL有服务器端查询计划缓存相比,JDBC连接的PreparedStatement缓存的性能提升是多少?因此,如果确实在物理连接的缓存中找到了PreparedStatement,那么它是否意味着当它到达mysql服务器时,mysql不会对它运行查询优化并且能够直接执行它吗?
在使用MySQL作为我的数据库时,我是否应该在JDBC连接级别使用Statement缓存?我正在使用Hikari数据库连接池与Mysql JDBC连接器.
Ant*_*oly 10
是的,如果您知道自己在做什么,缓存不会受到影响.如果您按照预期重复使用预准备语句,那么将客户端缓存与服务器端缓存Wilds性能结合起来会带来好处(许多人忘记了最重要的部分:D).只需正确设置Connector/J属性属性:
cachePrepStmts=true&useServerPrepStmts=true
Run Code Online (Sandbox Code Playgroud)
虽然我不是微观基准的忠实粉丝,但这里有一个支持我的陈述(确实是蹩脚的双关语).关于基准有趣的是,它表明,使服务器端缓存实际上可能会放慢改革的步伐没有一些客户端缓存,但缓存的两层启用以及准备语句的正确重用你实际上可能获得良好的加速.
HikariCP的作者之一.有关如何正确配置MySQL以进行预准备语句缓存的信息,请参阅HikariCP wiki.准备好的语句缓存可以大大加快SQL.此外,它可以避免对您的代码进行SQL注入攻击,否则如果您将用户提供的输入连接到SQL普通语句中就会成功. 永远不要撰写包含用户提供的输入的SQL字符串. 始终使用预准备语句,并将用户提供的输入设置为替换值.
其他品牌和型号的表服务器将比 MySQL 更能从 JDBC 准备好的语句中获得性能优势。例如,Oracle 可以重用执行计划。
但您仍然应该在 JDBC 中使用准备好的语句。使用它们的理由有很多,包括绑定变量带来的注入阻力。
| 归档时间: |
|
| 查看次数: |
7232 次 |
| 最近记录: |