여기서 잠깐!! 운이 좋게도 최근에 데이터베이스 for beginner 10장 인덱스에 대해 공부했습니다.
like '%검색어%' 에 대한 내용을 보니 공부하면서 질문 했던 내용이 생각났습니다.
%단어%, %단어는 인덱스의 첫번째가 무엇인지 알 수 없어 참조 할 수 없습니다.
question1 >인덱스가 있어도 인덱스 레인지 스캔을 사용할 수 없다
﹦인덱스 참조를 할 수 없기 때문에 인덱스를 타지 않는다
라고 이해해도 될까요???
answer1 > 인덱스 레인지 스캔은 아래 그림과 같이 인덱스를 읽어야하는 범위가 정해져서 특정 구간의 인덱스만 스캔하는것을 index range scan 이라고 하고 인덱스를 처음부터 끝까지 읽는 것을 인덱스 풀 스캔 이라고 합니다. 인덱스가 있어도 인덱스 레인지 스캔을 사용할 수 없다 는 말그대로 인덱스 레인지 스캔 을 할 수 없다는 뜻입니다. 인덱스를 탄다 라는 뜻이 인덱스 레인지 스캔을 의미하면 인덱스를 타지 않는게 맞지만. 인덱스 스캔을 하지 않는다고는 말할 수 없습니다.
<레인지 스캔>
:루트 노드로부터 비교를 시작해 리프노드에 도달하여, 리프노드의 시작위치부터 순차적으로 읽는 방식. 그리고 범위에 마지막에 해당하는 데이터의 주소를 찾을 때까지 스캔하는 방식
question2 > 저는 like 를 사용하면 아예 인덱스를 사용할 수 없다고 생각했는데, 테이블 풀 스캔과 거의 동일한 인덱스 풀 스캔이 발생한다는 것은 인덱스를 사용해서 스캔을 하는 것인가요??
answer2 > 인덱스 풀 스캔은 인덱스 스캔이 맞고, 인덱스의 크기가 테이블 크기 보다는 작으니 인덱스 풀 스캔이 테이블 풀 스캔보다는 효율적이지만 풀 스캔은 어쨌든 데이터를 처음부터 끝까지 읽는 다는 뜻입니다. 인덱스 풀 스캔은 효율적인 인덱스 스캔 방법이 아닙니다. 그리고 어떤 값을 SELECT 하냐에 따라서 옵티마이저가 더 효율적이라고 판단되는 방법을 선택하여 인덱스 풀 스캔이 아닌 테이블 풀 스캔을 할 수도 있습니다.
레인지스캔,풀스캔은 인덱스 스캔 방식이고,
클러스터형인덱스,보조인덱스는 인덱스 종류