Es gibt eine Abfrage, die vollständige Tabelle scannt, gibt es 5 Millionen Datensätze, kostet es etwa 60s. Wie kann ich das optimieren? Ich habe versucht, Speichermodus von SQLite zu verwenden, in der Theorie sollte dies schneller sein, da die gesamte Datenbank in Memroy gespeichert ist. Es kostet jedoch fast die gleiche Zeit. Tabellenschema wie folgt aus:Warum im Speichermodus donot beschleunigen in 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);
und dies ist Abfrage, Abfrage, die drei Tabellen verbinden müssen:
>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=?)
Wie diese Abfrage beschleunigen? Scheint es unvermeidlich, dass ein Tisch vollständig gescannt wird. Jede Tabelle enthält ca. 5 Millionen Datensätze, diese Abfrage kostet sehr lange Zeit (mehrere Minuten). Wenn ich db im Speicher ablege, benutze diese # sqlite3: memory :, es macht keinen Unterschied in der Geschwindigkeit. Hilfe wird sehr geschätzt.
Um dies zu optimieren, scannen Sie nicht 5 Millionen Datensätze. –