두개의 테이블이 아래와 같은 스키마로 존재합니다. <br><br>create table target_tb ( idx int primary key auto_increment, data varchar(200) unique, result int(11) default 0 );<br><br>create table target_tb ( data varchar(200) primary key, result int(11) default 0 );<br><br><br>그리고, 다음과 같은 구문을 실행합니다. <br><br># 저장된 html파일을 가져와 stored procedure로 단어별로 파싱하는 작업을 합니다. <br># 파싱하는데에 스토어드 프로시저 이용은 과제의 전제조건이라 어쩔수가 없네요.<br># proc(data)는 태그를 제거하는 역활을 합니다.<br>DECLARE cur CURSOR FOR SELECT proc(data) FROM html where ind>=S LIMIT N LOCK IN SHARE MODE;<br><br>REPEAT <br> FETCH cur into v_text;<br> ~<br> START TRANSCATION;<br> WHILE (~)<br> ... # v_text의 파싱<br> INSERT INTO tartget_tb(data,result) values(currWords,1) ON DUPLICATE KEY UPDATE result = result+1;<br> END WHILE;<br> COMMIT;<br>UNTIL done = TRUE;<br>END REPEAT;<br><br><br><br>1. idx가 있는 tartget_tb에 대한 결과<br>Query OK, 0 rows affected (5 min 49.25 sec)<br><br>2. idx가 없는 target_tb에 대한 결과<br>Query OK, 0 rows affected (1 min 43.97 sec)<br><br><br>idx가 없는 테이블이 3.37배 가까이 빨랐습니다만, proc(data) 연산에 걸리는 시간이 동일하다고 생각하고 1분정도의 시간을 제외하면 4배 정도는 빠른 속도라고 생각됩니다.<br><br>데이터베이스를 깊이 공부하지 않아 이 현상이 이해가 되지 않는 상황입니다. pk에 auto_increment를 적용하면 연속된 insert시 속도가 빨라진다고 들었는데 그게 아닌가요 ㅠㅠ?<br><br>그리고, 어떻게든 속도를 빠르게 하고 싶은데 트랜잭션 관점이 아닌 스토어드 프로시저의 절차에서 수정할 만한 사항이 있을까요...?<br><br><br>혹시 PK와 UNIQUE를 같이 사용해서 속도가 저렇게 떨어지는것이였을까요?<br>data에 unique제약조건이 걸리나 primary key 제약조건이 걸리나 달라질건 없을 것 같은데<br><br>ㅁㅇ람ㄴㅇㄹㅁㄴㅇ<br>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.