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 26890 게시물 읽기
No. 26890
MySQL에서 어떻게 DB를 설계해야하는지에 대한 질문입니다.
작성자
clapton
작성일
2007-07-26 11:19
조회수
2,219


안녕하세요.

저는 현재 보험 계약  데이터에서 보험 해약율을 구하기 위해서 MySQL을  이용하고 있습니다.

하지만 DB 설계에 대한 경험이 없어서 성능이 잘 나오지 않네요.


현재 DB에는 160만건 정도의 data가 들어있고 그 형태는 다음과 같습니다.


CREATE TABLE TEMP (

rcd INT,        <== 계약일(date가 아니라 현재는 integer 형으로)

 ANP INT,     <== 보험료

premium INT,

statcode CHAR(5),  <== 보험상태(해약, 사망, 유지 등)

prodtype INT,

policy TINYINT,

rcd_ym MEDIUMINT,

prod_gb CHAR(20),

Class_Par CHAR(10),

n_Prod CHAR(30),

n_code CHAR(20));

계약일과 보험상태를 where에서 가장 많이 사용하기 때문에 index를 걸어두었습니다. 그리고 다음과 같이 query를 씁니다.


select sum(ANP), sum(policy) from TEMP where (rcd > 19960500 and rcd < 19960600) and (statcode != 'CI' and statcode != 'DC');


즉, 주어진 기간과 상태에 부합하는 보험료의 총합과 보험계약의 갯수를 구하는 것입니다.



문제는 보험상태와 계약일의 중복도가 굉장히 심합니다. 같은 계약일에 같은 보험상태를 가지는 data가 굉장히 많네요.

그래서인지 index를 설정하더라도 속도가 굉장히 느립니다.


월별로 (rcd > 19960500 and rcd < 19960600) 쿼리를 해서 122달치 쿼리를 돌리면 약 1분이 걸리네요.



이를 어떻게 해결해야 할지 감이 오지 않아서 고수님들의 도움을 구했으면 좋겠습니다. 상태별로 table을 나누어야 하는 것인지 아니면

인덱스 설정을 좀 더 효율적으로 해야하는 것인지가 감이 오지 않습니다.


미리 감사드리며 이만...










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

항상확인하는 통계 DATA를 보관하는 TB를 생성하는건 어떨까요 ?
프로시져를 이용해서 실시간으로 DATA 변경집계도 가능할것 같기도 하구요...

반화넬(반씨아찌)님이 2007-07-26 16:03에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
26894게시판 자료 첨부시 랜덤키 생성해서 파일관리 하려 합니다. fk 설정에 관해서 [1]
그냥이
2007-07-26
1791
26893function 을 만들었는데 왜 null 만 리턴될까요 [2]
최선숙
2007-07-26
2146
26891Mysql 에서 Table 용량이 얼마까지 좋을까요?? [1]
진로
2007-07-26
1739
26890MySQL에서 어떻게 DB를 설계해야하는지에 대한 질문입니다. [1]
clapton
2007-07-26
2219
26889phpMyAdmin에서 한글이 꺠져보여서요 [2]
김민정
2007-07-25
1907
26888기본적인 like 검색입니다. [1]
이아람
2007-07-25
2140
26887공백에 재약받지 않고 검색하는법 [1]
갈켜주세요
2007-07-25
2478
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다