2016-07-05 1 views
0

두 테이블, table1 (매우 큰) 및 table2 vakyes 사용하여 table1에서 값을 줄이기 위해 필요한 table2 (훨씬 작은)이 거대한 (8 GB/14126762 행) 있습니다.Sqlite3 느린 업데이트

작은 데이터베이스 (5MB 데이터베이스)를 사용하여 일부 테스트를 수행했지만 괜찮 았습니다. 하지만 지금은 더 큰 데이터베이스에서 사용할 때 영원히 필요하며 전혀 작동하는지 모르겠습니다.

예를 들어 INSERT 명령으로 데이터베이스를 만드는 데 12 분이 걸립니다. SQLite는 트랜잭션에

UPDATE table1 
    SET vl_empenho = vl_empenho - 
    (SELECT vl_estorno 
    FROM table2 WHERE table1.cd_ugestora = 
    table2.cd_ugestora AND table1.dt_ano = 
    table2.dt_ano AND table1.nu_empenho = 
    table2.nu_empenho) 
    WHERE cd_ugestora IN (SELECT table2.cd_ugestora FROM 
    table2 WHERE table1.dt_ano = 
    table2.dt_ano AND table1.nu_empenho = 
    table2.nu_empenho); 

미안 능숙하지 내가 원하는 것을 준,하지만 난 경우 중복 모른다 :

성가신 트랜잭션은 다음 것은.

도움 주셔서 감사합니다. 그와

PRAGMA synchronize = OFF; 
PRAGMA jorunal_mode = MEMORY; 

은, 내가 언급 한 위의 UPDATE를 수행하는 20 분 걸렸다과 :

+1

는 귀하의 관계를 색인 생성합니까? 그렇지 않은 경우 업데이트하기 전에 색인을 생성하는 것이 좋습니다. –

+0

색인을 다음과 같이 색인화해야합니까? CREATE INDEX MyLittleIndex ON table1 (vl_empenho); CREATE INDEX MyLittleIndex2 on table2 (vl_estorno); – nicmano

+1

sqlite 파일을 로컬 또는 네트워크 드라이브에 저장 하시겠습니까? –

답변

0

는 의견과 다른 유래 관련된 질문을 읽은 후, 나는 또한 설정, 쿼리의 각 컬럼에 대한 인덱스를 만들어 파일 크기 (실제로 10GB)를 고려하여 적절한 것으로 판단되는 INSERT 명령에 대해 6 분.

모든 관심에 감사드립니다.