-
[sqlite3] transaction 이용한 퍼포먼스 향상sqlite3 2013. 6. 11. 16:57728x90반응형
그냥 보통 방법으로 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초로 백배 이상 빨라졌다.
'sqlite3' 카테고리의 다른 글
sqlite3 문자열을 숫자로 변환하여 비교하기 (0) 2013.12.30 sqlite3 파일 사이즈 줄이기 (0) 2013.12.30 [sqlite3] wrapper class in c++ and STL on linux (0) 2013.05.24