2014-02-11 4 views
2

삭제 작업이 느리고이 검사를 어떻게 개선 할 수 있는지 궁금합니다.Sqlite 삭제 엄청나게 천천히 - 속도를 올리는 방법?

나는 매일 10-15k 행으로 채워진 테이블을 가지고 있으며 6 개월이 넘은 모든 레코드를 정리해야하지만 데이터베이스가 커지면 속도 문제가 발생하기 시작합니다. 기록의 1 MILION 닫기 나는이 명령을 실행할 때 - 나는 삭제 아무 상관이없는 경우에도 - 소프트웨어 분 동안 정지 .... 허용하지 않은 :

Using cnn as New SqliteConnection(dbConnection) 
    cnn.Open() 
    dim cmd as New SQLiteCommand(cnn) 
    cmd.CommandText = "DELETE FROM tablename WHERE timecolumn < datetime('now', '-6 months')" 
    rowsUpdated = cmd.ExecuteNonQuery 
End Using 

이도 걸어 몇 분 안에 결과 레코드가 삭제되지 않은 경우

어떻게 더 빨리, 더 빨리 할 수 ​​있습니까? 내가

주춤 6 .NET 컴팩트 프레임 워크 3.5에서 일하고 있어요

여기 SQLite Optimization을 조정할 수있는 많은 일들이 있습니다 당신에게

+0

이 큰 데이터베이스에는 sqlite를 사용해야합니까? 당신이 고려할 수있는 가능성을 전환하고 있습니까? – alexis

+0

글쎄, 장치 기능이 종료되지 않습니다 ... 그래서 나는 가능한 경우 SQL로 전환하지 않는 것을 선호합니다. 나는 기회가 없다면 ... 밀리언이 SQLite를위한 큰 데이터베이스인가? 솔직히, 나는 그렇게 생각하지 않았다 –

+0

[SQLite의 성능을 어떻게 향상시킬 수 있습니까?] (http://stackoverflow.com/questions/1711631/how-do-i-improve-the-performance-of- sqlite) – Alberto

답변

1

감사드립니다. "PRAGMA cache_size"를 변경하여 "tablename"전체를 메모리로 가져 오려고합니다. 삭제할 때 btree를 재조정해야합니다. 그것이 그것을하는 동안 모두 메모리에있을 수 있다면 그것은 훨씬 더 빠를 것입니다.

또한 'timecolumn'필드에 색인을 추가 할 것입니다. 이 파일이 없으면 테이블의 모든 레코드를 스캔하여 삭제합니다. 조건과 일치하는 레코드를 실제로 삭제할 때 수행되는 작업에 추가되지만 전반적으로 훨씬 빠릅니다.

가능한 경우 partgion을 지원하는 데이터베이스 (예 : postgreSQL)로 이동하고 'timecolumn'을 사용하여 데이터를 기간으로 분할합니다. 이것은 DB가 테이블을 많은 서브 테이블로 나눌 수있게 해주 며, "timecolumn"과 "timecolumn"사이의 검색을위한 정리 및 쿼리의 속도를 향상시킵니다.

+0

감사합니다. 열의 색인 생성이 업데이트/삽입 속도가 느려지는 것을 읽었습니다. 이것은 아마도 저에게 문제가되는 것 같습니다 ... 어쨌든 나는 PRAGMA 변경 사항과 함께 시도 할 것입니다. –

관련 문제