인덱스란https://soobysu.tistory.com/115 [DB] Index 테이블 인덱스 설정 feat.JPAIndex 인덱스란 뭘까 ?데이터베이스 인덱스는 추가 쓰기 및 저장 공간을 희생 하여 테이블에 대한 데이터 검색 작업의 속도를 향상시키는 데이터 구조입니다 .(DB에서 검색이 이루어 질땐 컴퓨soobysu.tistory.com인덱스 생성 고려사항 인덱스는 WHERE 절에 자주 사용되는 속성이어야 한다. 인덱스는 JOIN에 자주 사용되는 속성이어야 한다. 단일 테이블에 인덱스가 많으면 속도가 느려질 수 있다. 속성이 가공되는 경우 사용하지 않는다. 속성의 선택도가 낮을 때 유리하다. 즉, 검색 조건에 자주 사용되고 카디널리티가 높은 컬럼을 인덱스로 설정하면 좋다.*카디널리티란 특정 데이터 ..
Index 인덱스란 뭘까 ?데이터베이스 인덱스는 추가 쓰기 및 저장 공간을 희생 하여 테이블에 대한 데이터 검색 작업의 속도를 향상시키는 데이터 구조입니다 .(DB에서 검색이 이루어 질땐 컴퓨터는 처음부터 끝까지 모든 데이터를 검색한다.)JPA에서 Index를 설정한다는 것은대부분 단일 테이블에서 선택한 데이터 열을 복사하여 만들어 놓는다. 어떤 엔티티를 대상으로 사용해야 할까 ?* 중복도가 낮은 것 !주민번호 / 중복이 낮다. 성별 / 중복이 매우 높다. 같이 남 / 여 두가지만 존재하여 여러값들이 중복이 많은 데이터는 피해야 한다 ! * 크기가 큰 테이블 인덱스 설정 @Index @Target({})@Retention(RUNTIME)public @interface Index { String ..
postgresql bash 로 접속후 로그인 까지 완료 해준다. docker exec -it 도커네임 psql -U postgres -W postgres postgres select * from pg_tables; 일반적으로 이렇게 조회를 생각했었는데 이러면 시스템 테이블까지 조회가 됏었다. 생성된 테이블만 조회를 하려면 데이터테이블을 제외 해주고 조회를 한다. SELECT schemaname, tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema';
BooleanBuilder package study.querydsl.dto; import lombok.Data; @Data public class MemberSearchCondition { //회원명, 팀명, 나이(ageGoe, ageLoe) private String username; private String teamName; private Integer ageGoe; private Integer ageLoe; } Request 받을 DTO Wrapper 클래스(Integer)를 사용한 이유는 값이 null일 수도 있기 때문이다. public List searchByBuilder(MemberSearchCondition condition) { BooleanBuilder builder = new Bool..
BooleanBuilder BooleanBuilder는 Predicate를 구현하는 구현체이고 Predicate는 where절의 파라미터 타입입니다. 따라서 BooleanBuilder를 이용해 조건절을 추가한 뒤 where절에 전달하면되고, 이 부분을 동적으로 구현할 수 있습니다. 현재 Entity는 필드 수가 워낙 적어 경우의 수가 몇 가지 나오지 않으니 한 번 모두 테스트해보도록 하겠습니다. @SpringBootTest @Transactional class PlayerTest { @Autowired EntityManager entityManager; private JPAQueryFactory queryFactory; @BeforeEach void setup() { Team tottenhamHotspu..
순수JPA @Test public void findDtoJPQL() throws Exception { List result = em.createQuery("select new study.querydsl.dto.MemberDto(m.username,m.age) from Member m", MemberDto.class) .getResultList(); for (MemberDto memberDto : result) { System.out.println("memberDto = " + memberDto); } } 순수 JPA에서 DTO를 조회할 때는 new 오퍼레이션을 사용해야한다. DTO의 package path를 모두 적어줘야 한다. 생성자 방식만 지원한다. QueryDSL - 프로퍼티 접근 - 필드 접근 ..
Paging / Pagination DB에 저장된 데이터들을 페이지에 맞춰서 몇 개씩 뿌릴건지 알려주는 것 DB에 저장된 데이터가 20개이고 프론트에서 1페이지에 5개씩 이라고 요청하면 백엔드에서 전체 DB에서 데이터를 앞에서부터 5개씩 분류하여 해당 페이지에 맞는 데이터를 넘겨줌. JPA - Pageable 이를 위해서 JPA에서 Pageable이라는 객체를 제공하고있다. Pageable이란?Pageable 이 Pagination 요청 정보를 담기위한 추상 인터페이스 라는 의미/실제로 쓰기 위해서는 구현체가 필요 class QPageRequest : QueryDSL 을 위한 Pageable 구현체 class PageRequest : 가장 기본적인 Pageable 구현체 enum Unpaged : pag..
fetchResult (deprecated) 이전까지의 페이징 방법중 하나는 fetchCount()와 fetchResult()를 이용하는 방법이였다.하지만 이는 단순히 count 처리하는 용도이기 때문에 QueryDSL에서는 이를 지원하지 않기로 결정했다고 한다.따라서 count와 result를 더 효율적으로 이용하는 방법을 사용하자.List content = queryFactory .select( new QMemberTeamDto( member.id.as("memberId"), member.username, member.age, team.id..