我遇到一個優化問題,我找不出爲什麼我的查詢太慢了。Spring JPA Hibernate:slow SELECT查詢
這裏我實體:
@Entity
@Table(name = "CLIENT")
public class Client {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "CLIENT_ID")
@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "CLIENT_S", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
private Long id;
@Column(name="LOGIN")
private String login;
@Column(name="PASSWORD")
private String password;
而且DAO
@NoRepositoryBean
public interface ClientDao extends JpaRepository<Client, Long>, JpaSpecificationExecutor<Client> {
Client findByPasswordAndLogin(@Param("login") String customerLogin,@Param("password") String customerHashedPassword);
}
當執行方法findByPasswordAndLogin,大約需要200毫秒內完成(既通過JUnit測試,並與JProfiler的看到)。
這裏休眠查詢: 休眠:從CLIENT clientx0_其中clientx0_.PASSWORD =選擇clientx0_.CLIENT_ID如CLIENT_ID1_4_,clientx0_.LOGIN如LOGIN9_4_,clientx0_.PASSWORD如PASSWORD10_4_,clientx0_.STATUT如STATUT13_4_?和clientx0_.LOGIN =?
當我在數據庫中執行手動SQL查詢,只需要3毫秒:
select * from CLIENT where PASSWORD='xxxxx' and LOGIN='yyyyyyyy'
我們有4000個客戶在我們的發展環境在。超過一百萬的生產。
這裏的背景:
- JDK 8
- 春4.1.6.RELEASE + JPA + Hibernate的
- Oracle數據庫10
任何想法?
什麼是'CustomAuditable'?創建一個'Client'實例是否昂貴? –
您是否嘗試過測量應用程序端的事務執行時間? – galovics
你能發佈由休眠產生的實際sql嗎?可能您有一些預先加載或其他後續查詢正在運行。 Hibernate統計信息也可以縮短實際的查詢執行時間。 –