[MySQL] 다수의 데이터 업데이트 시 성능 관련 문의 드립니다. 0 1 725

by 펠코스 [2015.11.16 19:05:04]


안녕하세요.

데이터베이스 설계 후 기능 구현 중 궁금한 것이 있어 질문 올립니다.

현재 데이터베이스 구조 예

* (A) 과목테이블 {key , 과목명 }

* (B) 학생테이블{ key, 학생이름, 학생번호, 반 }

* (C) 시험일자테이블 {key, 시험일자, 시험목적, 시험장소 }

* (D) 시험학생참여테이블{ 과목key, 학생key, 시험key, 점수 }

 

이런 형태로 구성되어 있습니다.

처음에는 시험학생참여테이블에 국어,영어,수학 등 과목을 각각의 칼럼으로 Fix 시키려 했지만

시험과목이 Custom 하게 추가 삭제가 가능하다는 전제가 있어 과목테이블(A)와 시험학생참여테이블 (D)로 분리하였습니다.

이 상황에서 기능 구현하다 문제가 생격는데요.

학생이 100명이고 국,영,수 세 과목을 수강한 경우

(D) 테이블에 100x3 의 row가 발생합니다.

쿼리를 통해 한 학생당 과목정보를 같은 Row로 빼는 것 까지는 되었지만, 문제는 데이터 수정 시

100x3의 update가 발생하는 문제가 있습니다.

 

혹시 현재 상황에서 update를 최소화 할 수 있는 방안이 있을까요?

동시 Update를 이리저리 검색해 보았는데 마땅히 적용할 수 있는게 없네요..

DB 설계 부터 문제가 있는 것인지요?

 

다르게 생각해 본 것은

그냥 (D) 시험학생참여테이블에 칼럼 갯수(시험 항목 수)를 Fix하고,

(E) 시험일자시험과목 테이블을 새로 생성하여 (D) 테이블에 연동하는 것이 어떨까하는 생각도 해봅니다 ㅡㅡ;;

2015-11-01 시험일자에 국,영,수 시험을 쳤다면,

(E) 시험일자시험과목 테이블에 국,영,수 과목에 대한 key 값을 설정하고..

(D) 테이블에  (2015-11-01),(국어점수),(영어점수),(수학점수) 형태로 들어가는 거죠.

물론 (E)와 (D) 테이블의 칼럼수가 똑같이 들어가게 될 것입니다.

 

보통 실무에선 위와 같은 상황 발생 시 어떤 방식으로 처리를 하나요?

update row 수가 많더라도 첫번째 방법으로 설계하는 것이 옳은 것인지 궁금합니다.

 

 

 

 

by 펠코스 [2015.11.16 20:46:30]

자답입니다. 맞는지 모르겠네요.

UPDATE tableName
    SET fieldname1= CASE fieldValue1
        WHEN A1 THEN 'data1'
        WHEN A2 THEN 'data2'
        WHEN A3 THEN 'data3'
        WHEN A4 THEN 'data4'
    END

WHERE fieldValue1 IN ( A1, A2, A3 )

위와 같이 처리하니 한 학생에 대한 국어,영어,수학 과목의 값을 한번에 업데이트가 가능하네요.

기존에 100*3 건이  100건으로 줄어들겠군요 ....흠..

일단 이렇게 생각해 보았는데....

고수님들 더 좋은 방법이나 다른 의견 있으시면 답변 부탁드릴게요. ㅠㅠ

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