pk로 index full scan 때리는 거는 개선 어떻게 할 방법 없음? where 절에 조건 추가하고 커버링 인덱스 걸어줘야하나
백갤러 1(121.130)2024-11-01 09:04
답글
포인트 쿼리인데 seek연산을 못하고 scan하는건여러 이유가 있을 수 있음첫번째는 인덱스를 제대로 태우지 못하는 where조건을 가진다거나 (앞선 인덱스키를 빼먹거나 convert같이 변환시키는경우)두번째는 seek연산이 비용이 더 나오는 경우이건 물리적 조인도 알아야 하는데보통 드라이빙 테이블에서 seek은 seek + partial scan이고 드리븐 테이블에서의 seek은 only seek에 필요에따른 lookup인데 이경우 드라이빙 테이블의 1행당 드리븐테이블의 넌리프 페이지를중복으로 읽는 비용이 발생함 그래서 이 비용이scan연산후 통계기반으로 merge나 hash 조인이 유리하다 생각하는 임계점을 넘었을때 스캔연산으로플랜이 바뀜 - dc App
30세전에특급DBA(118.235)2024-11-01 09:09
답글
단순히 님말마따나 pk가 요구사항에 커버링 인덱스가 아닌거일수도 있고 - dc App
30세전에특급DBA(118.235)2024-11-01 09:11
답글
첫 댓이 맞는 듯 plan 보면 hash match로 되어있다
백갤러 1(121.130)2024-11-01 11:03
답글
아 그리고 추가적으로
인덱스가 카디널리티가 낮은 경우에도 그럴 수 있음 - dc App
30세전에특급DBA(118.235)2024-11-01 11:08
답글
정확히 어떤 상황인지는
비즈니스 로직, 테이블 및 인덱스 스키마,
데이터 분포, 인덱스 통계상태를 종합적으로
검진해보셈 - dc App
pk로 index full scan 때리는 거는 개선 어떻게 할 방법 없음? where 절에 조건 추가하고 커버링 인덱스 걸어줘야하나
포인트 쿼리인데 seek연산을 못하고 scan하는건여러 이유가 있을 수 있음첫번째는 인덱스를 제대로 태우지 못하는 where조건을 가진다거나 (앞선 인덱스키를 빼먹거나 convert같이 변환시키는경우)두번째는 seek연산이 비용이 더 나오는 경우이건 물리적 조인도 알아야 하는데보통 드라이빙 테이블에서 seek은 seek + partial scan이고 드리븐 테이블에서의 seek은 only seek에 필요에따른 lookup인데 이경우 드라이빙 테이블의 1행당 드리븐테이블의 넌리프 페이지를중복으로 읽는 비용이 발생함 그래서 이 비용이scan연산후 통계기반으로 merge나 hash 조인이 유리하다 생각하는 임계점을 넘었을때 스캔연산으로플랜이 바뀜 - dc App
단순히 님말마따나 pk가 요구사항에 커버링 인덱스가 아닌거일수도 있고 - dc App
첫 댓이 맞는 듯 plan 보면 hash match로 되어있다
아 그리고 추가적으로 인덱스가 카디널리티가 낮은 경우에도 그럴 수 있음 - dc App
정확히 어떤 상황인지는 비즈니스 로직, 테이블 및 인덱스 스키마, 데이터 분포, 인덱스 통계상태를 종합적으로 검진해보셈 - dc App