인프런 커뮤니티 질문&답변
ep 3 5분 16초 경 설명 질문 있습니다.
해결된 질문
작성
·
308
0
ix_fd1, ix_fd2 가 인덱스가 있는 경우인데 아래 쿼리가 어떻게 커버링 인덱스로 사용될 수 있나요?
select count(ix_col2) where ix_fd1=?;
오타일까요? (ix_col2 -> ix_fd1 이려나요?)
근데 오타라고 가정하고, ix_fd1 이 nullable 이면 해당 칼럼들의 null 여부 확인으로 not null 일때보다 시간이 오래걸릴거 같은데 맞을까요?
퀴즈
MySQL에서 CHAR와 VARCHAR 데이터 타입의 주요 차이점은 무엇일까요?
CHAR는 가변 길이, VARCHAR는 고정 길이 문자열을 저장해요.
CHAR는 최대 길이만큼 공간을 미리 할당하고, VARCHAR는 저장된 데이터만큼만 공간을 사용해요.
VARCHAR는 인덱스를 사용할 수 없지만, CHAR는 사용할 수 있어요.
VARCHAR는 최대 저장 용량이 CHAR보다 훨씬 작아요.
답변 3
1
1
안녕하세요.
예제 쿼리에 오타가 있었네요.
말씀하신대로, "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의 처리 방식에 따라 다를 수 있습니다.





