해결된 질문
24.06.26 23:49 작성
·
183
0
ix_fd1, ix_fd2 가 인덱스가 있는 경우인데 아래 쿼리가 어떻게 커버링 인덱스로 사용될 수 있나요?
select count(ix_col2) where ix_fd1=?;
오타일까요? (ix_col2 -> ix_fd1 이려나요?)
근데 오타라고 가정하고, ix_fd1 이 nullable 이면 해당 칼럼들의 null 여부 확인으로 not null 일때보다 시간이 오래걸릴거 같은데 맞을까요?
답변 3
1
1
2024. 06. 29. 12:29
안녕하세요.
예제 쿼리에 오타가 있었네요.
말씀하신대로, "ix_col2" 가 아니고 "ix_fd2"가 되었어야 맞는 예제입니다.
빠르게 고쳐서 다시 업로드하도록 하겠습니다.
제보해주셔서 감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 답변드립니다.
ix_fd1, ix_fd2
가 인덱스가 있는 경우, select count(ix_col2) where ix_fd1=?;
쿼리가 커버링 인덱스로 사용되는 것에 대한 궁금증을 가지셨군요.
오타 여부에 대해 말씀드리면, 질문하신 내용만으로는 정확한 판단이 어렵습니다. 하지만 일반적으로 커버링 인덱스는 쿼리가 요구하는 모든 데이터를 인덱스에서만 가져올 수 있을 때 사용됩니다. 만약 ix_fd1
이 인덱스로 설정되어 있고, 해당 쿼리에서는 ix_fd1
의 값에 따른 ix_col2
의 개수를 세고자 한다면, 실제로는 ix_fd1
을 기반으로 인덱스를 검색하여 해당 조건을 만족하는 레코드의 개수를 반환할 텐데, 이 과정에서 ix_col2
가 언급되는 것은 실제로는 오타일 가능성이 있습니다. ix_fd1
의 개수를 세는 것이 목적이라면 select count(ix_fd1) where ix_fd1=?;
가 올바를 가능성이 높습니다.
ix_fd1
이 nullable
인 경우, null 여부를 확인해야 하므로 not null인 경우보다 시간이 더 오래 걸릴 수 있습니다. 인덱스에서도 null 값을 가진 항목은 따로 관리되기 때문에, null값을 확인하는 추가적인 처리 과정이 필요하기 때문입니다.
질문에 명확하게 답변드리기 위해서는 해당 코스의 내용을 더 자세히 파악할 필요가 있습니다만, 일반적으로 커버링 인덱스는 해당 쿼리를 완전히 커버할 수 있는 인덱스 필드들로 구성되어야 합니다. 오타 여부와 null 처리에 대한 성능 차이는 해당 필드의 인덱스 구성 및 사용되는 DBMS의 처리 방식에 따라 다를 수 있습니다.