database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 21508 게시물 읽기
No. 21508
MySQL 책 보다가.. 테이블 분리에 대해서..
작성자
최해길(ggil)
작성일
2004-04-16 18:34
조회수
2,386

MySQL 책을 보다가 발견한건데요.

 

게시판 같은 테이블에서 본문은 보통 TEXT 혹은 BLOB 일겁니다.

 

그런데 한 테이블에 TEXT 혹은 BLOB 가 있으면 검색시 속도가 떨어진다고 하더군요.

 

그래서 게시판의 기본정보 부분(특히 검색란, 본문검색 제외) 과 본문(TEXT 부분)을 분리 할까 생각중입니다.

 

이때 제로보드 처럼 목록을 가져올때 리스트에 마우스 올리면 본문내용을 간략하게 가져 올때와

 

테이블 분리 안하고 가져올때 속도차이가 어느게 좋을까요?

이 글에 대한 댓글이 총 6건 있습니다.

아마 저의 책을 보신 듯 한데(혹은 다른 저자의 책을 보셨더라도),

핵심은 Fixed Length record가 variable length record보다 빠르다는 것이죠.

얼마나 빠른지는 확인이 안 되고, MySQL 메뉴얼에 나온 이야기를 그대로 쓴 것입니다.(다른 저자가 쓴 책의 내용도 마찬가지겟구요)

 

근데, 실제 필드에서 작업할 때는 테이블 나누고 그러면 귀찮아서, 걍 text나 blob을 한 테이블에 저장해 버립니다.

 

빨라져 봐야 얼마나 빠를까 하고 말이죠 ㅎㅎ(무책임 한가용?)

이번 기회에 최해길님께서 두 방법을 비교해서 올려 주시면 감사하겠습니다.~~

 

허정수(wertyu)님이 2004-04-17 17:30에 작성한 댓글입니다.

허정수님께서 친히 답변하셨네요. 책 잘보고 있습니다.

 

이 부분은 예전부터 저도 궁금해하던 부분인데, 메뉴얼 어디서 찾아볼수 있을까요 ? 해당 링크 첨부를 부탁드려도 될까 모르겠습니다. 또 그렇다면 varchar 형과 같은 기타 가변길이 컬럼에도 똑같이 해당되는 말이겠군요 .

 

그리고 허정수님 책에서 VARCHAR 보다는 CHAR를 쓰는게 속도 향상에 낫다라고 하셨는데, 이 경우에 의문점이 하나 있어 질문을 첨부합니다. 이럴 경우 char 는 varchar 보다 훨씬 많은 공간을 차지 할 것이고, 그만큼 블럭킹 인수가 낮아질 것입니다. 그럼 오히려 똑같은 데이터를 뽑아오는데 읽어오는 블럭 수가 더 많아지지 않을까요 ? 동일한 크기의 자료를 읽어오는데 읽어오는 블럭 수가 많아 진다면, 속도는 오히려 더 느려지지 않을까 싶습니다.

 

바쁘시겠지만 시간 나시면 답변 주시면 감사하겠습니다

최근한(ckh0618)님이 2004-04-18 01:06에 작성한 댓글입니다.

네에.

MySQL 사이트가 많이 바뀌었네요.

 

http://dev.mysql.com/doc/mysql/en/Static_format.html

 

여기를 참고하시면 되구요.

 

VARCHAR()보다 CHAR()를 쓰면 빨라진다는 위의 URL에 적혀 있습니다.

 

그리고, Disk는 Block device다 보니, 1 byte를 읽든 255 Bytes를 읽든 1개의 block이 잃혀지게 되겠죠.

 

한번 읽혀진 block은 MySQL의 캐시에 저장이 되기도 하고, OS의 파일 시스템 캐시에서 읽혀지기도 하므로, 처음 읽는 것만 느릴 뿐 읽은 것을 다시 읽는 것은 빠릅니다.

 

또 하드 디스크는 일단 데이터를 읽을 곳으로 헤드가 이동하기만 하면, block을 읽는 것은 빠르다고 합니다. 엄청난 양이 아닌 이상, n개의 block을 읽는 것이나, n*2 block을 읽는 것이나 비슷한 시간이 걸린다는 의미죠.

 

레코드 수가 많아지면 읽어야 할 block 수가 문제가 아니라, 레코드 위치를 매번 계산해야 하는 것이 더 시간이 많이 걸릴 것입니다.

 

물론 두 방법의 속도 차이는 실제 대용량을 가지고 테스트를 해 보는 것이 가장 좋겠죠.

 

일단 위의 URL에 있는 내용을 읽어보세요~

 

 

허정수(wertyu)님이 2004-04-18 02:44에 작성한 댓글입니다.

답변 감사합니다.

 

가변길이 컬럼때문이라면 varchar 를 사용하지 않아야 한다는 뜻이죠?

 

즉 char 만 사용한 테이블을 따로 만들고 varchar 를 사용하는(text, blob 포함) 테이블을 서로 분리 시킨다면 속도가 빠른것 같습니다.

 

게시판 목록을 보여주는 부분은 당연히 char 만 사용하는 테이블을 사용하는거죠.

 

일반적인 게시판을 만들때 이 방법을 사용한다면 조금... 더 빠른 게시판이 될것 같습니다. 물론 테스트는 아직 못해봤습니다.

 

여기에서 질문 하나만 더 하겠습니다.

 

테이블 분리를 했을경우 게시판의 제목에 마우스를 올리면 내용을 요약해서 보여주는 기능을 넣는다면 두 테이블을 조인해야 하는데요.

 

이때는 테이블을 나누는것과 나누지 않은것에 대해서 어느게 더 빠를까요?

최해길(ggil)님이 2004-04-19 10:41에 작성한 댓글입니다.

 

말씀하신 경우는 테이블을 나눈 이득을 못 보는 경우라고 생각됩니다.

 

테이블을 나눈 이유가 레코드 길이를 동일하게 하려는 것인데,

 

fixed length table과 variable size table을 조인 시키면 어차피 variable한 테이블에서 가져온 것과 동일하다고 생각됩니다.~

허정수(wertyu)님이 2004-04-19 16:13에 작성한 댓글입니다.

그렇군요. 물론 나눴을때의 이득은 보지 못할것 같습니다.

 

게시판의 설정란에 이 기능을 활성화 시키느냐 그렇지 않느냐를 결정합니다.

 

그러므로 게시판 목록에 내용이 요약해서 보여질지 여부는 게시판을 운영하는 사람에 달려 있고, 또한 시스템에 과부하가 많지 않다면(레코드가 적거나 시스템이 좋다면) 이 기능을 사용하면 되겠지만 그렇지 않을경우 사용하지 않으면 됩니다.

 

또한 대부분의 사용자는 이 기능을 사용하지 않을것 같구요.

 

단지 저는 가변 길이 테이블 하나만 사용하는것 보다 고정길이 테이블 + 가변길이 테이블을 조인해서 사용하면 성능면에서 많이 차이가 나는지 궁금합니다. 게시판 목록 보기에서 말이죠. 다른 부분은 문제가 없을것 같네요.

최해길(ggil)님이 2004-04-20 09:45에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
21512사용자 권한과 아이디 모두 삭제하는법 [1]
이승용
2004-04-20
1399
21511마지막으로 입력된 필드명 구하기... [1]
김민수
2004-04-20
930
21510telnet으로 접속시 문제점 [1]
이승용
2004-04-19
1101
21508MySQL 책 보다가.. 테이블 분리에 대해서.. [6]
최해길
2004-04-16
2386
21507지정되어 있던 FOREIGN KEY 속성을 없애려고 합니다. 도와주시겠어요? [9]
mhj
2004-04-16
3632
21506[질문] group by... [3]
김대근
2004-04-14
1326
21505가상 필드를 만들어서 임의의 데이터를 넣을수 있나요? [5]
snagwoon
2004-04-14
4143
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다