|
才发现,sqlite可以强制用索引
sqlite> CREATE TABLE gravity
...> (
(x1...> domain TEXT NOT NULL,
(x1...> adlist_id INTEGER NOT NULL REFERENCES adlist (id),
(x1...> PRIMARY KEY(domain, adlist_id)
(x1...> );
sqlite> explain query plan select count(*) from (select distinct domain from gravity);
QUERY PLAN
|--CO-ROUTINE (subquery-1)
| `--SCAN gravity USING COVERING INDEX sqlite_autoindex_gravity_1
`--SCAN (subquery-1)
sqlite> explain query plan select count(distinct domain) from gravity;
QUERY PLAN
|--USE TEMP B-TREE FOR count(DISTINCT)
sqlite> explain query plan select count(distinct domain) from gravity INDEXED BY sqlite_autoindex_gravity_1;
QUERY PLAN
`--SCAN gravity USING COVERING INDEX sqlite_autoindex_gravity_1
sqlite> CREATE INDEX idx_gravity_domains_only ON gravity (domain);
sqlite> explain query plan select count(distinct domain) from gravity;
QUERY PLAN
`--SCAN gravity USING COVERING INDEX idx_gravity_domains_only
sqlite> |
|