sqlite32013.06.11 16:57

그냥 보통 방법으로 INSERT와 DELETE등의 쿼리를 반복적으로 수행할때에 sqlite3의 성능은 형편없이 떨어지는데, 이럴때에는 Transaction을 이용해야 한다. 100개의 INSERT에 5초이상 걸리기도 하니 Transaction은 필수적이다.


int TSqlite::ExecuteMulti(const list<string> &queries)

{

// begin

sqlite3_exec(this->m_db, "BEGIN TRANSACTION;", 0, 0, 0);


list<string>::const_iterator ils = queries.begin();

while(ils != queries.end()){

sqlite3_exec(this->m_db, ils->c_str(), 0, 0, 0);

ils++;

}


// end

sqlite3_exec(this->m_db, "END TRANSACTION;", 0, 0, 0);


return sqlite3_total_changes(this->m_db);

}


sqlite3 stmt를 사용하지 않고, 간단히 구성해 보았다.  BEGIN - query - END 형식으로, 최종적으로 Effected Rows를 돌려주도록 하였다. 

테스트로 INSERT 600개를 연속으로 보냈을때에, 실행시간은 약 5초-> 0.05초로 백배 이상 빨라졌다. 

Posted by Jadumate

티스토리 툴바