강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

모깅님의 프로필 이미지
모깅

작성한 질문수

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

3-6. 쿼리플랜이란?

인덱스 데이터 흐름

해결된 질문

작성

·

80

0

1. 현재 학습 진도

  • 몇 챕터/몇 강을 수강 중이신가요?

    • 3-6. 쿼리플랜이란?

       

  • 여기까지 이해하신 내용은 무엇인가요?

    • 옵티마이저가 스토리지 엔진으로부터 가장 효율적으로 데이터를 가져오기 위해 쿼리플랜을 작성한다는 것을 이해했습니다.

 

2. 어려움을 겪는 부분

  • 어떤 개념이 헷갈리시나요?

    • 이때 인덱스를 참고해서 데이터를 가져온다면 이 인덱스는 메모리에 올라와 있는 상태인가요?? 아니면 디스크에 있는 인덱스를 확인하고 디스크에서 데이터를 가져오는 건가요?

       

      데이터를 가져오는 전체적인 흐름이 궁금합니다!

 

3. 시도해보신 내용

  • 문제 해결을 위해 어떤 시도를 해보셨나요?

  • 에러가 발생했다면 어떤 에러인가요?

  • 현재 작성하신 코드를 공유해주세요

 

이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!

답변 3

1

딩코딩코님의 프로필 이미지
딩코딩코
지식공유자

3주차 - 06. 쿼리플랜이란? -  인덱스는 그럼 디비의 어느 공간에 있는건가요?

 

영역에 추가해뒀습니다 🙇

1

딩코딩코님의 프로필 이미지
딩코딩코
지식공유자

안녕하세요 모깅님!! 좋은 질문 감사합니다!!

우선, 디비 내의 인덱스는 상황에 따라 메모리 또는 디스크에 있을 수 있습니다!

  1. 자주 사용되는 인덱스: Buffer Pool(메모리)에 캐시됨

  2. 처음 접근하는 인덱스: 디스크에서 메모리로 로드

  3. 메모리 부족 시: LRU 알고리즘으로 일부 인덱스가 디스크로 내려감

 

따라서 전체 데이터 조회 흐름은 다음과 같습니다!

1. SQL 파싱 및 최적화 :옵티마이저가 쿼리 플랜 생성

2. 인덱스 확인 : 필요한 인덱스가 Buffer Pool에 있는지 확인, 없다면 디스크에서 Buffer Pool로 로드, 인덱스 스캔으로 데이터 위치(페이지 번호) 찾기

3. 실제 데이터 조회 : 데이터 페이지가 Buffer Pool에 있는지 확인, 없다면 디스크에서 Buffer Pool로 로드, 메모리에서 데이터 반환

 

한 번 관련해서 궁금한 점은 해당 공식 문서(https://dev.mysql.com/doc/refman/8.4/en/innodb-buffer-pool.html) 를 참고해보셔도 좋을 것 같습니다 좋은 질문 감사드립니다!! 해당 내용은 교재에도 추가해두겠습니다 강의에 기여해주셔서 너무너무 감사합니다!!

0

안녕하세요, 인프런 AI 인턴입니다.

모깅님, 인덱스를 사용하여 데이터를 어떻게 가져오는지에 대한 데이터 흐름에 혼동이 있으신 것 같습니다. 데이터베이스에서 인덱스를 사용하는 것은 효율적인 데이터 검색을 가능하게 합니다. 인덱스는 특정한 방법, 즉 B-트리나 해시 등을 사용하여 저장됩니다. 이 과정에서 인덱스가 메모리에 있는지, 디스크에 있는지는 중요한 차이를 낳습니다.

인덱스 데이터 흐름의 이해:

  1. 인덱스의 저장 위치:

    • 핫 카피(캐시된 인덱스): 자주 사용하는 인덱스의 일부는 메모리에 캐시될 수 있습니다. 이것은 더 빠른 검색을 가능하게 합니다.
    • 콜드 카피(디스크 저장 인덱스): 모든 인덱스가 메모리에 상주하진 않으며, 저장소 용량 등의 문제로 인해 디스크에 저장됩니다.
  2. 데이터 접근 흐름:

    • 쿼리가 수행되면 데이터베이스 엔진은 먼저 쿼리 최적화기를 통해 가장 효율적인 쿼리 경로를 결정합니다.
    • 인트라 메모리 접근: 인덱스가 메모리에 캐시되어 있다면 즉시 접근하여 빠르게 데이터를 검색할 수 있습니다.
    • 디스크 접근: 메모리에 없는 경우, 디스크에서 인덱스를 읽어 와야하며 이 과정에서 IO 비용이 발생할 수 있습니다.
    • 결과적으로 인덱스를 통해 적절한 데이터를 찾아 반환합니다.
  3. 성능 향상 방법:

    • 인덱스가 메모리에 적재되도록 캐싱 정책을 조정하여 성능을 개선할 수 있습니다.
    • 데이터베이스 서버의 메모리를 늘려 더 많은 인덱스를 메모리에 상주시키는 것도 고려할 사항입니다.

데이터 흐름에 대한 더 자세한 내용은 관련 논의나 토픽을 참고하시면 도움이 될 것 같습니다. 이와 관련하여 예제와 깊이 있는 설명을 다루는 질문 제목: SQL 쿼리 튜닝의 중요성 이 유익할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

모깅님의 프로필 이미지
모깅

작성한 질문수

질문하기