-
CS : DB : paging, no offset, covering indexComputer Science/DB 2021. 4. 13. 18:47728x90
Paging
1.
DB에서 데이터를 읽어와 화면에 출력할 때, 한꺼번에 모든 데이터를 가져오는 것보다, 출력될 페이지의 데이터만 나눠서 가져오는 것을 말한다.
2.
기초적인 페이징 구현 방식은 대용량 데이터를 다룰 때에 효과적이지 못할 수 있다.
3.
이 때 사용할 수 있는 방법으로, no offset 방식을 사용하는 것과, 커버링 인덱스를 사용하는 것에 대해 설명하겠다.
No Offset 방식
1.
기존의 페이징 쿼리는 다음과 같은 형태이다.
이와 같은 형태의 페이징 쿼리가 뒤로 갈수록 느린 이유는, 앞에서 읽었던 행을 다시 읽어야 하기 때문이다.
2.
이러한 문제를 해결하는 no offset 방식은, 조회 시작 부분을 인덱스로 빠르게 찾아 매번 첫 페이지만 읽도록 하는 방식이다.
3. no offset 방식 단점 또는 사용할 수 없는 경우
- where절에 사용되는 기준 key가 중복이 가능할 경우
- 예를 들어, where절에서 사용되는 컬럼에 대해 group by를 사용한다면 사용이 불가하다.
- 회사 혹은 서비스 정책상 페이지를 사용해야만 하는 경우
커버링 인덱스
1.
커버링 인덱스란, 쿼리를 충족시키는 데에 필요한 모든 데이터를 가지고 있는 인덱스를 말한다.
즉, select, where, order by, limit, group by 등에서 사용되는 컬럼들이 모두 index 컬럼 안에 포함된 경우를 말한다.
2.
join절 내부를 보면, 사용되는 컬럼이 모두 index 컬럼 안에 포함되었다고 가정했을 때, index의 이점을 통해 빠르게 scan이 이뤄지고, 이렇게 row를 먼저 거른 후 실제 select절의 항목을 조회하면 더욱 빠른 성능을 보이는 것이다.
3.
커버링 인덱스를 사용하지 않은 것과 사용한 것의 비교이다.
4. 커버링 인덱스 방식의 단점 또는 사용할 수 없는 경우
- 너무 많은 인덱스가 필요하다.
- 쿼리의 모든 항목이 인덱스에 포함되어야 하기 때문에, 쿼리에 따라 새로운 인덱스가 계속해서 생성될 수 있다.
- 인덱스의 크기가 너무 커진다.
- 모든 절에서 사용되는 컬럼이 전부 인덱스에 포함되어야 하기 때문이다.
- 데이터의 양이 많아지고, 페이지 번호가 뒤로 갈수록 no offset 방식에 비해 느리다.
- 물리적으로 no offset 방식이 커버링 인덱스 방식보다 빠르고, 따라서 데이터 양이 많아질수록 차이는 더 커질 것이다.
728x90'Computer Science > DB' 카테고리의 다른 글
CS : DB : RDBMS vs NoSQL (0) 2021.04.20 CS : DB : Block vs Non-Block, Sync vs Async (0) 2021.04.13 CS : DB : 트랜잭션과 격리 수준 (0) 2021.04.13 Question : DB (0) 2021.04.06 CS : DB : 인덱스, 리플리케이션, 클러스터링 (0) 2021.04.01 - where절에 사용되는 기준 key가 중복이 가능할 경우