inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Hoàn thành trong 6 tuần! 4 chiến lược tạo sự khác biệt cho CV Backend - Cách để nổi bật giữa hàng loạt hồ sơ giống nhau

3-7. Thực tế tìm hiểu và phân tích kế hoạch truy vấn (Query Plan).

인덱스 관련 질문 있습니다.

51

tlsdlek119395

4 câu hỏi đã được viết

0

안녕하세요 인덱스로 성능 개선을 공부하는 도중 궁금한점이 생겨서 질문 드립니다.

제가 만든 프로젝트의 인덱스를 분석해보니 fullscan을 타고 있더라구요 근데 이 쿼리를 조금 복잡하게 짜서 어떻게 인덱스를 타게 해야하지를 고민 하던 도중 where에 조건을 or로 두고 is Not_null로 둔 조건이 있는데

우선 or을 쓰는게 인덱스를 타기 어렵게 만드는 조건이라고 하더라구요

그래서 where의 or조건을 각각 테이블을 분리해서 인덱스를 각각 타게 만든 후 union all로 홥쳐서 사용하는 방식으로 하라고 하던데

여기서 궁금증은 현업에서 저와 같은 상황에서 or조건을 안쓰는지 궁금하고

찾아보니 인덱스를 타기 어렵게 만드는 조건

이런 식으로 있던 것 같던데 이걸 모두 고려하면서 쿼리를 짜는건지가 궁금합니다.

java spring mysql redis 이력서

Câu trả lời 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 문영훈님.

인덱스 사용과 관련하여 복잡한 쿼리에서 성능 최적화에 대한 질문을 주셨네요. 현업에서 인덱스 최적화는 DB 성능을 극대화하는 중요한 작업 중 하나입니다. 주신 리스트와 같은 조건이 인덱스 효율성을 낮출 수 있고, 이를 고려하여 쿼리를 작성하는 것이 일반적입니다.

쿼리 최적화 방법:

  1. OR 조건의 활용:

    • 말씀하신 것처럼 OR 조건은 인덱스 효율성을 저하시킬 수 있습니다. 따라서, 가능하다면 쿼리를 재구성하여 UNION ALL 또는 다른 구조로 변경해 성능을 개선할 수 있습니다.
  2. 햄스터와 조합해 보기:

    • 데이터베이스 옵티마이저가 OR 조건을 잘 처리하지 못할 경우 UNION ALL을 사용함으로써 개별 조건의 인덱스를 탈 수 있도록 해주는 것이 좋습니다.
  3. 함수와 연산자의 사용:

    • 인덱스가 적용되는 필드에 함수를 적용하면, 인덱스를 활용하지 못할 수 있습니다. 함수를 사용하지 않고 필드를 직접 비교하도록 쿼리를 수정하는 것이 좋습니다.
  4. LIKE와 와일드카드 사용:

    • LIKE 문법에서는 가장 앞에 %를 붙이지 않는 것이 좋습니다. %를 앞에 붙일 경우, 인덱스가 무용지물이 되기 쉽습니다.
  5. 널 비교:

    • NULL 값의 비교나 IS NOT NULL 조건을 자주 사용하는 경우에도 주의가 필요합니다. 옵티마이저가 인덱스를 사용하지 않을 가능성이 높습니다.
  6. 샘플 데이터 추출을 통한 성능 테스트:

    • 인덱스 설계를 변경하거나 쿼리를 재구성해 볼 수 있습니다.

이러한 조건을 모두 고려하면서 쿼리를 작성하는 것이 이상적이지만, 실제로는 데이터 구조와 쿼리 사용 내역을 기반으로 필요한 부분만 중점적으로 최적화합니다.

문영훈님께서 언급하신 문제에 대해 더 많은 예시나 이해를 돕고자 비슷한 문제를 다룬 게시글을 추천드립니다:
- 효율적인 인덱스 사용과 쿼리 최적화 전략

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

Build 관련 문제 (테스트 관련 문제)

0

30

1

비관적 락 구현 방식 문의 건

0

61

2

외부 api 처리 방안에 대하여 궁금한 점이 있습니다.

0

87

2

네임드 락 사용 시 커넥션 풀을 분리하는 방법에 대한 질문

0

78

2

이벤트) 백엔드 기술면접 실전문제집

0

99

2

로컬에서 테스트 한 결과를 이력서에 써도 괜찮을까요?

0

127

2

데드락 발생 시, 외래 키를 제거하는 방법 관련 질문

0

82

2

Redis 캐싱을 도입하는데 db조회와 성능이 차이가 거의 없습니다.

0

107

2

k6 부하테스트 중인데 개선 전 성능이 너무 안나와서 고민

0

115

2

강의와 성능수치 비교

0

100

2

13강 강의 뒷부분의 과제 안내부분은 어디있나요?

0

49

2

이벤트 참가자 수 증가 후, save 메서드 호출 코드 질문

0

64

2

[수업 자료 질문] Cache Aside의 특징 문의

0

82

2

[수업자료 문의] RedisTemplate으로 SETNX 시 리턴값 문의

0

79

2

블로그에 학습 내용 정리 포스트를 올려도괜찮나요?

0

107

2

멀티스레드 상황인데 currentParticipants 가 AtomicInteger가 아닌 이유?

0

86

3

클라우드 환경 배포시 부하 테스트 방식에 대하여

0

133

2

k6 dashboad 안나오는 상

0

111

2

2-4 도커 빌드 에러가 계속 납니다.

0

295

2

AWS EC2에 도커 컨테이너가 동작하지 않을 때 확인 해야하는 것

0

112

2

성능 측정시

0

104

2

API 별 실행 쿼리 모니터링 구현 질문 있습니다.

0

79

2

이력서 작성에 대한 질문

0

105

2

트랜잭션 격리성 설계도 어필포인트로 가져갈 수 있을까요?

1

63

2