【发布时间】:2018-06-04 14:09:42
【问题描述】:
sqlite> .schema actor
CREATE TABLE actor (
id INTEGER PRIMARY KEY, name TEXT, gender TEXT
);
sqlite> explain query plan
...> select * from actor where id = '305453';
0|0|0|SEARCH TABLE actor USING INTEGER PRIMARY KEY (rowid=?)
sqlite> explain query plan
...> select * from actor where name = 'Connery, Sean';
0|0|0|SCAN TABLE actor
sqlite>
与SCAN TABLE actor相比,SEARCH TABLE actor USING INTEGER PRIMARY KEY (rowid=?) 花费的时间明显减少
很明显SCAN TABLE actor 是对actor 表的详尽扫描,因为可能存在重复,但是,
1) SCAN TABLE & SEARCH TABLE 是在扫描 B-TREE 还是记录序列?
2)如果是B-Tree,那么SEARCH TABLE怎么查询更快?
【问题讨论】:
-
主键是一个索引,不需要每一行都读取。
-
@Barmar 首先,在这两种情况下,这些查询是扫描记录序列还是 B-tree。因为带有主键的 B-Tree 相当快。