전체 테이블을 검색하는 쿼리가 있습니다, 5million 레코드가 있습니다, 그것은 약 60 비용. 이것을 최적화하는 방법? 나는 sqlite의 메모리 모드를 사용하려고 시도했다. 이론적으로 이것은 전체 데이터베이스가 memroy에 저장되기 때문에 더 빠르다. 그러나 비용은 거의 같은 시간입니다. 이 같은 테이블 스키마 :왜 메모리 모드에서 donot 가속 sqlite
CREATE TABLE tbl0(estimateid int, seq int, field1 int NULL, field2 int NULL, field3 int NULL, field4 int NULL);
CREATE INDEX tbl0_idx on tbl0(estimateid);
CREATE TABLE tbl1(seq int, companyid int, field1 int NULL, field2 int NULL, field3 int NULL, field4 int NULL, field5 int NULL);
CREATE INDEX tbl1_idx on tbl1(seq);
CREATE TABLE tbl2(symbolid int, relatedcompanyid int, value char(64), field1 int NULL, field2 int NULL, field3 int NULL, field4 int NULL, field5 int NULL);
CREATE INDEX tbl2_idx on tbl2(relatedcompanyid);
이 쿼리는 쿼리 조인 3 개 테이블이 필요합니다
>explain query plan select tbl0.estimateid, tbl1.seq, tbl1.companyid, tbl2.value from tbl0, tbl1, tbl2 where tbl0.seq = tbl1.seq and tbl1.companyid = tbl2.relatedcompanyid;
0|0|1|SCAN TABLE tbl1
0|1|2|SEARCH TABLE tbl2 USING INDEX tbl2_idx (relatedcompanyid=?)
0|2|0|SEARCH TABLE tbl0 USING AUTOMATIC COVERING INDEX (seq=?)
방법이 쿼리를 가속화 할 수 있습니까? 하나의 테이블이 완전히 스캔되는 것이 불가피한 것 같습니다. 각 테이블에는 약 5 백만 개의 레코드가 들어 있으며,이 쿼리에는 매우 긴 시간 (몇 분)이 소요됩니다. db를 메모리에 넣었을 때 # sqlite3 : memory :를 사용하면 속도가 달라지지 않습니다. 도움이 매우 감사합니다.
이를 최적화하려면 5 백만 개의 레코드를 검사하지 마십시오. –