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