クエリは、完全なテーブルをスキャンする、5millionレコードがあり、それは約60sです。これを最適化する方法は? 私は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=?)
を? 1つのテーブルが完全にスキャンされることは避けられないようです。各テーブルには約500万レコードが含まれており、このクエリには非常に長い時間がかかります(数分間)。 私はdbをメモリに入れて、この#sqlite3:memory:を使用します。速度に違いはありません。 ヘルプは非常に高く評価されています。
これを最適化するには、500万レコードをスキャンしないでください。 –