在Java中的线程环境中发出存储过程的最快选项是什么?根据http://dev.mysql.com/doc/refman/5.1/en/connector-j-usagenotes-basic.html#connector-j-examples-preparecall Connection.prepareCall()是一个昂贵的方法。那么当对一个CallableStatement的同步访问不是一个选项时,在每个线程中调用它的选择是什么?在多线程中以Java执行MySQL存储过程的快速方法?
0
A
回答
0
大多数JDBC驱动程序每个连接只使用一个套接字。我认为MySQL也使用一个套接字。在多个线程之间共享一个连接是一个糟糕的性能想法。
如果在不同线程之间使用多个连接,那么每个连接都需要一个CallableStatment。每个连接都需要一个CallabaleStatement池。在这种情况下,最简单的方法是将连接类包装并将所有调用委托给原始类。 Eclipse的创建速度非常快。在包装方法prepareCall()中,您可以添加一个简单的池。您还需要一个CallableStatement的包装类。 close方法将CallableStatement返回到池中。
但是,首先你应该检查是否真的很贵,因为很多司机已经有这样的民意调查。创建一个prepareCall()和close()循环并计算时间。
0
连接不是线程安全的,所以你不能跨线程共享它。
当你的prepareCall,JDBC驱动程序(可能)是告诉RDBMS系统做了很多存储在服务器端的工作。你可能在这里犯了过早的优化。
0
给这个稍加思考后,它看来,如果您有问题,与此基础结构代码,然后你的问题是在其他地方。大多数应用程序不需要花费过多的时间来完成这些工作。
确保您使用的是DataSource,大部分都是连接缓存,有些甚至是缓存语句。
也是因为这是一个性能瓶颈,这意味着你正在一个接一个地做很多查询,或者你的连接池太小。也许你应该在你的代码上做一些基准测试,看看存储过程需要多长时间,而JDBC代码需要多少时间。
当然,我会遵循MySQL使用CallableStatement的建议,我相信他们已经对此进行了基准测试。大多数应用程序不会在线程之间共享任何内容,这很少是问题。
相关问题
- 1. 在Java中执行MySQL存储过程
- 2. 从PHP执行java MySQL存储过程
- 3. 无法执行MySQL存储过程
- 4. 有多少种方法执行存储过程将被执行
- 5. 执行Mysql存储过程的问题
- 6. 在存储过程中执行带参数的存储过程
- 7. 的Java存储过程不执行
- 8. 为什么此存储过程在Management Studio中快速执行,但不在应用程序中执行?
- 9. 用多参数在Loopback远程方法中执行Postgres存储过程
- 10. Java:通过多线程并行化快速排序
- 11. 在另一个存储过程中未执行存储过程
- 12. 在存储过程中执行存储过程
- 13. 执行存储过程并行方式
- 14. 我的存储过程执行多次?
- 15. MySQL存储过程执行错误
- 16. 使用DBVisualizer执行MYSQL存储过程
- 17. mysql存储过程执行SHOW CREATE TABLE
- 18. 在多线程进程中运行存储过程
- 19. 执行在多线程静态方法
- 20. MySQL线程快速增长
- 21. 无法让我的存储过程在MySQL上执行
- 22. 快速存储过程,但使用作业执行时速度慢
- 23. 通过Java中的线程控制方法的执行
- 24. 并行执行java中的多线程
- 25. 对多个表执行存储过程
- 26. MySQL查询在直接运行时速度很快,但在以存储过程运行时速度很慢
- 27. 执行数据集超时发生在非常快速的存储过程
- 28. 具有多种方法的Java类可以在线程中执行
- 29. 无法以编程方式在快速
- 30. isAlive()在java多线程中执行