1 minute read

Mention : 검색 성능 개선의 효과가 굉장하다며? 왜 모든 요소에 다 안걸어?🧐

  • 데이터의 크기가 작거나 자주 갱신되는 테이블에서는 사용하지 않는것이 좋다.
    • 100만 개의 데이터가 들어있는 테이블이라면 풀 스캔보다는 인덱스 스캔이 유리하겠지만, 1개의 데이터가 들어있는 테이블은 굳이 인덱스 스캔 없이 풀 스캔이 빠를 것이다.
  • 인덱스를 관리하기 위해서는 데이터베이스의 약 10%에 해당하는 저장공간이 추가로 필요하다. 무턱대고 인덱스를 만들어서는 결코 안 된다는 것이다. 즉, 속도 향상에 비해 단점들의 COST를 비교해서 인덱스를 만들지 말지를 정해야 한다.
  • 전체적인 데이터베이스의 성능 부하를 초래 한다.
  • INSERT?
    • 페이지 분할
      • 페이지에 새로운 데이터를 추가할 여유공간이 없어 페이지에 변화가 발생
      • DB가 느려지고 성능에 영향을 준다.
  • DELETE?
    • 인덱스의 데이터를 실제로 지우지 않고 사용안함 표시를 한다.
  • UPDATE?
    • DELETE (기존 값 사용안함 표시)
    • INSERT (변경된 값 삽입)
  • UPDATE와 DELETE의 경우 사용하지 않는 인덱스가 적용되었다면 불필요한 처리량 증가, 사용안함 표시로 페이지 낭비 및 인덱스 조각화 심해짐
    • 성능이 저하된다.
  • 조회 성능을 극대화하려 만든 객체인데 많은 인덱스가 쌓여서 INSERT, UPDATE, DELETE 시에 부하가 발생해 전체적인 데이터베이스 성능을 저하한다.
    • SQL문을 좀 더 효율적으로 짜는 방향으로 나아가는 것이 좋다.

Summary

  • 인덱스를 관리하기 위해서는 데이터베이스의 약 10%에 해당하는 저장공간이 추가로 필요합니다. 즉, 속도 향상에 비해 단점들의 코스트를 비교해서 인덱스를 만들지 말지를 정해야합니다. 모든 요소에 인덱스를 걸면 전체적인 데이터베이스의 성능 부하를 초래합니다. 또한 INSERT, UPDATE, DELETE 시에 부하가 발생하여 데이터베이스 성능을 저하합니다.

Reference 📚

https://choicode.tistory.com/27

Leave a comment