컬럼의 수와 블럭의 수의 관계에 대해서요 ㅠㅠ 0 2 831

by 김대식 [Oracle 기초] 블럭 컬럼 [2017.09.25 22:16:15]


컬럼이 많아지게 되면 물리적인 디스크에 여러 블록에 데이터가 저장된다고 하는데

왜 그런지 이해를 못하겠습니다 ㅠ

Row라는게 정확히 무엇인지 이해가 되질 않습니다 ㅠㅠ Row의 길이가 길어지면 여러 Block에 걸쳐서 저장되는 Row Chain 현상이

발생한다는데 Row를 튜플로 이해하면 될까요?ㅠㅠ

 

by jkson [2017.09.26 08:09:02]

row는 오라클에서 행이죠. 튜플 맞습니다.


그러면 컬럼이 많아지면 왜 성능이 안 좋아지는지 생각해보죠.

오라클은 블록 단위(보통 8k)로 데이터를 운송합니다.

따라서 한 블록에 얼마나 많은 row를 가지고 있느냐가 성능에 영향을 주겠죠.

쉽게 예를 들어볼게요.

엑셀에서 한 셀을 1k의 크기라고 합시다. 그러면 한 블록(8k)는 A열~H열까지가 되겠죠?

예를 들어 컬럼수가 작아서 1k까지만 사용해도 한 행의 정보를 모두 담을 수 있다면

16개의 행을 저장하기 위해서는 2블록을 읽어야 합니다.

그런데 컬럼수가 많아저셔 한 행이 3k까지 사용해야 한다면 16개의 행을 저장하기 위해서 6블록을

사용해야 하죠. 그러면 일의 양이 3배로 늘어납니다.

또한, 한 행이 3k를 사용한다면 3개의 행을 가져오기 위해서는 한 블록만 읽으면 안 되고 2 블록을

읽어야겠죠? 1,2행(엑셀에서 A1~F1)은 한 블록에서 가져오더라도 3행을 읽으려면 row chaining 현상이 일어날 수 밖에

없습니다.(엑셀에서 G1,H1-row chaining-A2) 한 행의 크기가 커질 수록 chaining 현상은 더 자주 일어날 수 밖에 없고요.

따라서 되도록 행의 갯수는 줄이고 가능한한 테이블을 여러개로 나누어서 공간 사용의 효율성을 높여야 하는 것이고

정규화도 이러한 맥락에서 이해하시면 좀 쉬우실 거라 생각합니다.


by 김대식 [2017.09.26 14:15:32]

감사합니다 ㅠㅠㅠ 이제야 이해가 되네요 ㅠㅠ 그럼 컬럼의 수가 많아서 1개의 로우를 저장하는데 10k가 필요하다면 1개의 로우를 저장하는것만으로도 블록 chaining 현상이 일어나는군요!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입