[sql] 인덱스 스캔과 인덱스 레인지 스캔의 차이

SQL에서 인덱스는 데이터를 빠르게 검색하고 조회하는 데 중요한 역할을 합니다. 인덱스 스캔과 인덱스 레인지 스캔은 둘 다 인덱스를 사용하여 데이터를 검색하지만, 그 동작 방식에는 차이점이 있습니다.

인덱스 스캔 (Index Scan)

인덱스 스캔은 인덱스의 전체 범위를 스캔하여 일치하는 모든 레코드를 찾아내는 방식입니다. 이 방식은 주로 인덱스를 사용하여 데이터를 검색하고, 조회되는 레코드의 수가 적을 때 효과적입니다.

인덱스 스캔은 다음과 같은 단계로 작동합니다:

  1. 인덱스의 첫 번째 블록에서 시작하여 모든 블록을 스캔합니다.
  2. 인덱스의 각 블록에서 해당하는 레코드를 찾아냅니다.
  3. 일치하는 레코드를 반환합니다.

인덱스 스캔은 빠른 시작 속도와 효율적인 데이터 액세스를 제공하지만, 모든 데이터를 스캔해야 하므로 큰 데이터셋에서는 비효율적일 수 있습니다.

인덱스 레인지 스캔 (Index Range Scan)

인덱스 레인지 스캔은 인덱스의 일부 범위만 스캔하여 일치하는 레코드를 찾아내는 방식입니다. 이 방식은 주로 범위 조건을 포함한 쿼리에서 사용되며, 일부 레코드만 반환하는 작업에 효과적입니다.

인덱스 레인지 스캔은 다음과 같은 단계로 작동합니다:

  1. 인덱스의 시작 포인트와 종료 포인트 사이의 모든 블록을 스캔합니다.
  2. 인덱스의 각 블록에서 해당하는 레코드를 찾아냅니다.
  3. 일치하는 레코드를 반환합니다.

인덱스 레인지 스캔은 검색 범위를 제한하여 더 적은 레코드를 스캔하므로 인덱스 스캔에 비해 효율적입니다. 그러나 시작 포인트와 종료 포인트 사이에 있는 블록만 스캔하므로 인덱스의 일부를 놓칠 수도 있습니다.

결론

인덱스 스캔은 모든 레코드를 스캔해야 하지만, 작은 데이터셋에서 빠른 시작 속도와 효율적인 데이터 액세스를 제공합니다. 인덱스 레인지 스캔은 범위 조건을 포함한 쿼리에서 효과적이며, 일부 레코드만 반환하는 작업에 유용합니다. 쿼리의 조건과 데이터셋의 크기에 따라 적절한 스캔 방식을 선택하는 것이 중요합니다.

참고 자료: