Hibernate优化,使用二级缓存?

Hibernate优化,使用二级缓存?,hibernate,caching,optimization,Hibernate,Caching,Optimization,我正在开发一个基于Hibernate的数据库访问和持久层。必须使用hibernate模块的应用程序必须使用多个联接执行非常复杂的查询 我必须根据其他客户购买的商品来推荐商品,因此很难将特定于缓存的数据存储在其中,因为推荐是具体的,而且缓存未命中的百分比非常高 我已经测试了性能,并且观察到所有的工作都非常慢,我使用Mysql 5、Hibernate 4和C3P0连接提供程序。我应该使用基于EHCACHE的二级Hibernate缓存系统吗?Memcached是一个好的解决方案吗?有没有其他方法可以提

我正在开发一个基于Hibernate的数据库访问和持久层。必须使用hibernate模块的应用程序必须使用多个联接执行非常复杂的查询

我必须根据其他客户购买的商品来推荐商品,因此很难将特定于缓存的数据存储在其中,因为推荐是具体的,而且缓存未命中的百分比非常高

我已经测试了性能,并且观察到所有的工作都非常慢,我使用Mysql 5、Hibernate 4和C3P0连接提供程序。我应该使用基于EHCACHE的二级Hibernate缓存系统吗?Memcached是一个好的解决方案吗?有没有其他方法可以提高Hibernate的性能


谢谢你的建议和帮助

首先通过直接SQLClient工具检查查询的性能。如果它的性能不好,请调整它。
现在,如果您计划单独对引用数据使用缓存(大部分为只读),那么EHCache是一个不错的选择。如果您想对事务数据使用缓存,JBOSS树缓存是一个不错的选择。

我已经尽可能优化了查询。如果我在Mysql Workbench中测试查询,它运行得很慢,但不像在Hibernate中那样慢。问题是缓存推荐并不容易。请使用select查询前面的explain选项查看和分析mysql workbench中的执行计划。示例:解释从用户选择*,其中id=5;你看到使用索引列的访问了吗?是的,我不知道Mysql的这个特性。非常感谢。但我不是Mysql专家,我不知道应该查看哪些参数来改进查询。我可以在额外的列中看到正在使用的索引。