1
我有位於內存映射分區上的sqlite3數據庫中的表。我有select語句看起來像這樣與此查詢計劃:sqlite3需要花費時間
sqlite3> EXPLAIN QUERY PLAN SELECT sst.prefix, 0 AS pb, sst.rate,
sst.rate_n, sst.interval_1, sst.interval_n
FROM sch AS sst
WHERE
sst.i_workbook_id = 989 AND
sst.prefix IN ('', '1', '19', '191', '1919', '19198') AND
sst.activation_date <= DATETIME('now') AND
(sst.expiration_date > DATETIME('now') OR sst.expiration_date IS NULL) AND
sst.start_time <= TIME('now') AND
sst.end_time >= TIME('now');
0|0|0|SCAN TABLE sch AS sst (~185 rows)
0|0|0|EXECUTE LIST SUBQUERY 1
現在,如果我那時他的查詢計劃爲主打表兩次加秩序,而表中有130萬行需要更長的時間的4倍得比較早,但過濾的行只有兩個。
這是新的查詢計劃:
sqlite3> EXPLAIN QUERY PLAN SELECT sst.prefix, 0 AS pb, sst.rate,
sst.rate_n, sst.interval_1, sst.interval_n
FROM sch AS sst
WHERE
sst.i_workbook_id = 989 AND
sst.prefix IN ('', '1', '19', '191', '1919', '19198') AND
sst.activation_date <= DATETIME('now') AND
(sst.expiration_date > DATETIME('now') OR sst.expiration_date IS NULL) AND
sst.start_time <= TIME('now') AND
sst.end_time >= TIME('now') order by sst.prefix;
0|0|0|EXECUTE LIST SUBQUERY 1
0|0|0|SEARCH TABLE sch AS sst USING AUTOMATIC COVERING INDEX (i_workbook_id=?) (~7 rows)
0|0|0|EXECUTE LIST SUBQUERY 1
0|0|0|SEARCH TABLE sch AS sst USING AUTOMATIC COVERING INDEX (i_workbook_id=?) (~7 rows)
0|0|0|EXECUTE LIST SUBQUERY 1
0|0|0|USE TEMP B-TREE FOR ORDER BY
任何想法?我究竟做錯了什麼?