개요

개인 프로젝트를 만들던 중 같은 결과 값을 보여주지만 쿼리 생성 기능에 따라 1차 캐시에 저장하는 속도가 차이가 나는 것일까?라는 생각은 안 하고 그냥 쿼리 생성문이 잘 작동하는지 테스트하려고 만든 것인데 다른 속도를 보여줘서 신기하다.

 

테스트 코드

@Autowired
private UserQuoteRepository quoteRepository;

@GetMapping("/test/quote/querytest1")
public String testQuoteQueryTest() {
	UserEntity entity = repository.findById((long) 1).get();

	long startTime = System.currentTimeMillis();
	Iterator<UserQuoteEntity> lists = quoteRepository.findQuoteEntitiesByUser(entity).iterator();
	long endTime = System.currentTimeMillis();
		
	return endTime - startTime + "ms";
}

@GetMapping("/test/quote/querytest2")
public String testQuoteQueryTest2() {
	UserEntity entity = repository.findById((long) 1).get();
		
	long startTime = System.currentTimeMillis();
	Iterator<UserQuoteEntity> lists = quoteRepository.findQuoteEntitiesByUserId(entity.getId()).iterator();
	long endTime = System.currentTimeMillis();

	return endTime - startTime + "ms";
}

 

 

테스트 케이스 1과  쿼리 생성 결과 )

 

쿼리문

 

시간 값

테스트 케이스 2와 쿼리 생성 결과)

쿼리문

 

결과 

테스트 1, 2의 요청된 데이터 결과 값은 서로 같지만 걸린 시간과 쿼리문은 서로 다르다. 걸린 시간도 최초 1회에 한에서 테스트 케이스 2가 빠르고 그 이후에는 비슷한 속도가 나타난다. 

 

테스트 케이스 모두 2개의 쿼리문이 생성되었고 1개는 유저를 조회하기 위한 쿼리문이기에 실제로는 1개의 쿼리문이 생성되었다.

 

추측은

1. 1차 캐시에 데이터가 비어있고 db에서 1차 캐시에 저장하는 속도에 따라 나타난 차이 같다.

2. 아니면 left outer join의 영향이지 않을까 한다. 

3. 테스트 케이스 1은 객체를 탐색하고 2는 객체의 id를 탐색하는 상황이어서?

4. 아니면 그냥 우연히..? 테스트가 잘못되었을지도... 

5. 아니면 postman에 따라서 속도가 달리지는 것?

 

정확히 알지 못하기에 좀 더 공부해야 할 것 같다. 13ms 차이이지만 그래도 궁금하다..

 

 

 

 

+ Recent posts