내가 찾고있는 응용 프로그램 중 하나가 ~ 20,000ms가 걸리는이 코드 조각이있다. 이것은 실제로 웹 사이트의 성능을 저해합니다. Criteria.list 때문에 이것이 있습니까? 느린 것을 담당하는 코드는 다음과 같습니다. 테이블의 모든 값을 검색하려고하는 예제 DB 테이블이 있습니다. 이 쿼리의 성능을 어떻게 향상시킬 수 있습니까? 내 데이터베이스로 SQL 서버를 사용하고 있습니다.매우 간단한 쿼리를 위해 Hibernate Criteria.list()가 매우 오랜 시간이 걸린다.
public Map<Integer, Sample> getAllSamples() {
Map<Integer, Sample> Sample = transactionTemplate
.execute(new TransactionCallback<Map<Integer, Sample>>() {
@Override
public Map<Integer, Sample> doInTransaction(TransactionStatus arg0) {
Criteria criteria = hibernateTemplate
.getSessionFactory().getCurrentSession()
.createCriteria(Sample.class);
criteria.add(Restrictions.isNull("deleted"));
@SuppressWarnings("unchecked")
List<Sample> Samples = (List<Sample>) criteria.list();
HashMap<Integer, Sample> mSamples = new HashMap<Integer, Sample>();
for (Sample sample: Samples){
if (sample != null && sample.getsampleId() != null){
//hibernateTemplate.initialize(sample);
mSamples.put(sample.getsampleId(), sample);
hibernateTemplate.initialize(sample.getsampleCountry());
}
}
return mSamples;
}
});
return Sample;
}
이제 My Sample 클래스에는 Account와 Deposit이라는 두 개의 다른 클래스가 있습니다. 샘플과 다른 두 개의 관계는 일대일 관계입니다. 그러나 fetchType은 lazy입니다. 여기에 내가 로그를 확인
@OneToOne(fetch = FetchType.LAZY, mappedBy = "sample", cascade = CascadeType.ALL)
public deposit getDeposit() {
return this.deposit;
}
샘플 클래스의 코드는, 그리고 샘플의 각 행에 대해, 예금에서 생성되는 쿼리가있다. 이것이 사실이 아닌지 어떻게 확인합니까? Sample에는 약 400 행이 있으므로, 입금액을 검색 할 때 400 개의 조회가 실행됩니다. 이것은 이상합니다. 성능 개선을 위해 여기서 무엇을 할 수 있는지 잘 모르겠습니다. 어떤 포인터가 큰 도움이 될 것입니다.
미리 감사드립니다.
단지 열망 페치를 사용 –