본문 바로가기

database32

[DB 3편] 페이징 개선(querydsl, 커버링인덱스, count 쿼리) 목차는 DB 목차 에 있습니다. [DB 3편] 페이징 개선(querydsl, 커버링인덱스, count 쿼리) 커버링 인덱스 찾고자 하는 데이터가 전부 인덱스 안에 들어있는 경우 데이터 블록을 조회하지 않고 인덱스에서만 조회합니다. (=성능이 빠릅니다.) 사용 예시 order by, limit offset 사용할 때, 데이터 블록에 접근해서 데이터를 접근합니다. 커버링 인덱스를 이용해서 인덱스에만 접근해서 데이터를 가져와서 성능 개선을 할 수 있습니다. source Querydsl 의 경우 서브 쿼리를 지원하지 않기 때문에 쿼리를 두번 사용해야 합니다. public xxx testPagaConveringIndex(xxx) { List seqs = queryFactory .select(test.seq) .f.. 2022. 4. 28.
[DB 2편] 페이징 개선(NoOffset) 목차는 DB 목차 에 있습니다. [DB 2편] 페이징 개선(NoOffset) 기존 페이지 방식 기본적으로 offset 과 limit 을 기반으로 페이징 쿼리를 조회합니다. 아래 예시와 같은 페이징이 느린 이유는 offset 부분을 계산하는 부분이 들어가기 때문입니다. offset 을 구하기 위해서는 앞에서부터 읽어나가야하는데 마지막으로 갈수록 앞에 읽어야하는부분이 많기에 읽는 속도가 점점 느려집니다. select * from test where xxx order by seq offset 0 limit 10 페이지 방식 개선 (No Offset) 조회 시작부분을 인덱스로 빠르게 찾아 offset 계산을 생략하는 것입니다. 이렇게 하기 위해서는 페이지 번호가 없고, 더보기, 더 찾아보기와 같은 방식을 이용하.. 2022. 4. 28.
[DB 1편] UUID 를 기본키로 설정했을 때, DB INSERT 성능 정리 목차는 DB 목차 에 있습니다. [DB 1편] UUID 를 기본키로 설정했을 때, DB INSERT 성능 정리 UUID 를 기본키로 설정했을 때, DB INSERT 성능 정리 InnoDB 를 기준으로 정리했습니다. UUID 는 36 무작위 문자로 이루어졌습니다. InnoDB 의 특성상 데이터를 저장할 때, 기본키로 정렬해서 저장을 합니다. (기본키가 유사하다면 물리적인 위치도 유사합니다.) 이것을 클러스터링이라 하며, 범위 검색을 할 경우 빠른 시간내에 찾을 수 있습니다. 그렇기에 UUID 를 기본키로 설정하는 것은 INSERT 할 떄, 물리적으로 데이터가 흩어져서 저장이 될 수 밖에 없습니다. 이는 다음과 같은 영향을 미칩니다. 무작위로 데이터를 저장하기에 Index 나 파일 사이즈가 커질 수 밖에 없.. 2022. 4. 26.
transaction isolation level 설명 transaction isolation level 설명 Read Uncommitted (레벨 0) - 거의 안씀 데이터를 읽을 때, 커밋되지 않는 데이터를 읽는다. 즉, 동시성 제어를 안한다. Read Committed (레벨 1) 커밋이 완료된 데이터만 읽을 수 있다. Dirty Read 보장 A, B 트랜잭션이 있고, A 에서 데이터를 변경하고 커밋 전에 B 가 해당 데이터를 읽을 경우 변경된 데이터를 읽을 수 없음. Non-Repeatable Read 현상 발생할 수 있음. 한 트랜잭션 내에서 같은 쿼리 2번 실행시켰는데, 1번 실행 후, 데이터가 다른 곳에서 변경돼서 커밋됐으면 다시 조회할 때 값이 달라질 수 있음. Repeatable Read (레벨 2) 선행 트랜잭션이 읽은 데이터는 트랜잭션이.. 2021. 2. 27.