로그인

  • 목록
  • 아래로
  • 위로
  • 쓰기
  • 검색

정보&강의 php에서 sqlite 속도처리를 위한 팁


sqlite 디비를 이용한 성경자료들을 변환하는데 있어서, insert 문이 방대해질 경우 속도가 엄청나게 느려기즌 경우가 있다.

 

보통은 안드로이드등의 스마트폰에서의 sqlite 디비의 속도처리를 위한 팁만 제공하고 있어, php에서의 속도처리를 위한 정보를 남길 필요가 있었다.

 

해당 소스는 베들레헴 성경, 주석 등의 sqlite 디비 정보를 포함한 insert 소스이다.

// sql 파일에 성경입력
$db = new SQLite3($sql_file);
$db->query("PRAGMA synchronous = OFF");
$db->query('PRAGMA journal_mode = MEMORY');
$db->exec('BEGIN TRANSACTION');
$articleInsertQuery = "INSERT INTO 'Bible' (id, book, chapter, verse, btext) VALUES (:id, :book, :chapter, :verse, :btext)";
$query = $db->prepare($articleInsertQuery);


// id 값정의
$id = 0;

while ($row = $results->fetchArray()) {

$Comments = $row[5];

// 권 요약이 있을 경우 첫 장의 1절에 내용을 포함시킨다.

$Comments = clearTags($Comments);


// id 값 생성
$id++;
//echo $inQuary = "'".$id."','".$row['Book']."','".$row['ChapterBegin']."','".$row['VerseBegin']."','".$Comments."'";  // 주석 내용 불러오기


$query->bindValue(':id', $id, SQLITE3_INTEGER);
$query->bindValue(':book', $row[0], SQLITE3_INTEGER);
$query->bindValue(':chapter', $row[1], SQLITE3_INTEGER);
$query->bindValue(':verse', $row[3], SQLITE3_INTEGER);
$query->bindValue(':btext', $Comments, SQLITE3_TEXT);    
$query->execute();
$query->clear(); //this is supposed to clear bindings!
$query->reset();

   }

// 베들레헴 주석 DB 종료
$db->exec('COMMIT');
$db->close();

 

주요 핵심 사항은 아래와 같다.

 

 

1. TRANSACTION 을 사용할 것

// sql 파일에 성경입력
$db = new SQLite3($sql_file);
$db->exec('BEGIN TRANSACTION');

//
insert문 반복
//


$db->exec('COMMIT');
$db->close();

insert 문을 BEGIN TRANSACTION과 COMMIT으로 감싼다.

 

 

2. insert 문을 바인드 시킨다.

$articleInsertQuery = "INSERT INTO 'Bible' (id, book, chapter, verse, btext) VALUES (:id, :book, :chapter, :verse, :btext)";
$query = $db->prepare($articleInsertQuery);


$query->bindValue(':id', $id, SQLITE3_INTEGER);
$query->bindValue(':book', $row[0], SQLITE3_INTEGER);
$query->bindValue(':chapter', $row[1], SQLITE3_INTEGER);
$query->bindValue(':verse', $row[3], SQLITE3_INTEGER);
$query->bindValue(':btext', $Comments, SQLITE3_TEXT);    
$query->execute();

 

 

3. 기타옵션

$db->query("PRAGMA synchronous = OFF");
$db->query('PRAGMA journal_mode = MEMORY');

 

 

4. insert 문에서 바인딩 값을 초기화 시킨다.

$query->clear(); //this is supposed to clear bindings!
$query->reset();

 

 


이런 글도 찾아보세요!

공유

facebooktwitterpinterestbandkakao story
퍼머링크

댓글 0

권한이 없습니다. 로그인

신고

"님의 댓글"

이 댓글을 신고 하시겠습니까?

삭제

"님의 댓글"

이 댓글을 삭제하시겠습니까?