2012-05-22 4 views
2

나는 100 개의 컬럼을 가진 oracle db 테이블을 가지고있다. 이 테이블의 50 열은이 테이블에 액세스하는 프로그램에서 사용되지 않습니다. (즉, 선택 쿼리만을 사용하여 관련 열을 선택하고 NOT '*')Oracle : 사용되지 않는 열이있는 테이블이 성능에 영향을 줍니까?

내 질문은 이것이다 : 나는이 같은 쿼리를 사용하여 쿼리 성능을 향상하기 만하면 열이 동일한 테이블을 재 작성하는 경우 원래 표와 함께 사용했습니다 (관련 열만 선택되었음을 기억하십시오).

이 프로그램은 이러한 쿼리를 초당 합리적인 횟수로 만들어줍니다.

P. : 이것은 내가 현재 작업하고있는 기존 프로젝트이고 다른 제품에도 테이블 디자인이 오래 전에 만들어진 것입니다. (현재 사용되지 않는 열이있는 이유는 무엇입니까?)

답변

3

그래서이 효과는 평균 여분의 열에 더 이상 테이블에없는 데이터가있는 경우 행이 더 작아집니다. 따라서 테이블은 더 작아 질 수 있으며 디스크 공간을 적게 차지할뿐만 아니라 SGA의 메모리 공간을 적게 차지할뿐만 아니라 캐싱이 더 효율적입니다.

따라서 전체 테이블 스캔을 통해 테이블에 액세스하면 세그먼트를 읽는 것이 더 빠를 것입니다.하지만 인덱스 기반 액세스 메커니즘을 사용하면 성능 향상이 향상 될 가능성이 있습니다 캐시에서 블록.

SO thread

[편집 됨] "는 항상 튜플 ...를 가져옵니다"제안합니다. 따라서 이미 언급 한대로 주요 또는 부전공이 아닌 성능 향상을 볼 수 있습니다.

+0

어쨌든 데이터를 전혀 조회하지 않았기 때문에 데이터는 메모리/SGA에로드되지 않습니다. 따라서 메모리/캐시/SGA 모두 문제가되지 않습니다. 저는 OP에서 언급 한 것처럼 관련 칼럼 만 선택된다는 것을 다시 강조합니다. –

+1

데이터가 디스크에서 Oracle SGA (System Global Area) 버퍼 캐시로 반입됩니다. 디스크에서 읽는 가장 작은 단위는 블록입니다. 일반적으로 4kb, 8kb 또는 16kb입니다. 따라서 한 열 또는 모든 열을 읽든 블록 전체를 Oracle 데이터 파일에서 SGA로 물리적으로 읽어 들일 필요가 있습니다. –

+0

내 대답 인 버디를 삭제했습니다. 그리고 나중에 마음을 바꿀 수 있다면 당신을 보완 할 것입니다. 정보 주셔서 감사합니다, 나는 그것을 몰랐습니다. –

관련 문제