######서론

일단 본인은 커버링 인덱스를 판단하는 주체가

인덱스가 가지는 키가 테이블이 요구하는 비즈니스들을

충족하여 해당 인덱스 스키마가 커버링 인덱스라고 판단하는

것이 아닌


해당 테이블을 탐색하는 쿼리(DML)구문이 판단주체 라고

생각하고 있음


######이유

#1. 용어의 정의

커버링 인덱스라는 용어는 사전적인 의미를 가지고 있지 않으니

대중적으로 어떻게 해석되는가를 기준으로 설명하자면


서론에서 설명한 바와 같이 인덱스를 가지고
쿼리를 기준으로 다른 연산이 필요 없이 커버되면 커버링 인덱스다.

와 비슷한 내용으로 커뮤니티에서 데이터베이스 이해관계자들이
사용하고 있음


그럼 여기서 엥? 그러면 먼저 설명한 비즈니스들을 충족하니

스키마 기준으로 판단하는게 맞지 않아?

라고 생각한다면 다음 이유를 보시오.



#2. 다른 조건의 여러 비즈니스를 가지는 경우

단순하게만 생각을 해봐도 해당 테이블이 여러 조건의

비즈니스를 가진다고 생각한다면 모든 비즈니스에 대해

만족할 수 없기 때문에 스키마를 주체로 커버링인덱스 인지 판단하는건

옳지 않아.


극단적인 예시지만 간단하게 설명하자면

컬럼을 1,2만 가지고 있는 테이블이 있다고 쳤을때
1, 2 순으로 클러스터드 인덱스만 생성한경우

1, 2 순으로 조건만 주면서 사용하다가


2, 1 순으로 조회해야하는 비즈니스가 생겼을때
현존하는 클러스터드 인덱스만으로는 풀스캔이후 필터링 하여야 하기 때문에

2, 1 순으로 만든 논클러스터드 인덱스가 추가로 필요해

따라서 해당 클러스터드 인덱스가 모든 비즈니스를 만족할 수 없기 때문에

스키마를 주체로 커버링 인덱스라고 얘기할 수 없는거여



#3. 엔티티에 속성이 추가되는 경우(인덱스로 걸려있지 않은 속성이 구문에 존재 하는 경우)가 있기 때문

ㅋㅋ 나는 테이블이 무조건 하나의 조건으로만 조회 될껀데?

-> 이경우에도 스키마를 기준으로 얘기하기 어려운 이유가
서비스가 지속되면서 스키마가 영원히 변하지 않는 경우도 없다고 보는게 맞는것같고
같은 조건으로의 탐색이라도 결과셋에 필요한 속성이 달라지는 경우도 있기 때문에

클러스터드 인덱스로써는 조건의 순서가 바뀐다거나 조건에 걸리지 않던 속성이 조건으로 걸린다거나
논클러스터드 인덱스로써는 모든속성을 포함하고 있었다해도 엔티티에 새로운 속성이 추가된다거나 한다는 식으로

비즈니스는 변화하기 때문에 스키마를 주체로 판단한 커버링 인덱스는
영속될 수 없다고 생각해.


#######결론
따라서 위 세가지의 이유를 들었지만 제일큰건 아무래도 1번이지... ㅋㅋ 다들그렇게 쓴다니까
여튼 뭔가 틀렸다고 생각하거나 반박할 여지가 있는건 댓글로 남겨줘

#######비고
이전의 인덱스 얘기들

https://gall.dcinside.com/mgallery/board/view/?id=backend&no=9693&page=1

pk가 커버링인덱스가 아닌경우실행계획에서 인덱스에 대한 Seek연산을 볼수있는데 해당 연산에서 Seek연산만으로 끝나면 커버링인덱스 인것이고 조건자 연산이 더붙으면 커버링 인덱스가 아닌것임 조건자가 붙었다는건 Seek연산 이후 결과물을 가지고gall.dcinside.com


- https://gall.dcinside.com/mgallery/board/view/?id=backend&no=9687&page=1