ove*_*nge 4 sql sqlite explain
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>
Run Code Online (Sandbox Code Playgroud)
SEARCH TABLE actor USING INTEGER PRIMARY KEY (rowid=?)与相比,花费的时间明显更少SCAN TABLE actor
很明显,由于重复的可能性,这SCAN TABLE actor是对表的彻底扫描,但是,actor
1)SCAN TABLE&SEARCH TABLE扫描B-TREE还是记录序列?
2)如果是B-Tree,那么如何SEARCH TABLE查询更快?
SEARCH TABLE意味着它使用索引,这是查找具有特定列值的行的快速方法。主键会自动建立索引,对于其他列,您需要使用命令显式添加索引CREATE INDEX。像这样搜索 B 树的时间复杂度为 O(log n)。
SCAN TABLE意味着它必须执行详尽的搜索,读取表中的所有行。扫描整个表的时间复杂度为 O(n)。当您匹配非索引列(如name您的示例中)时,就会完成此操作。
有关 SQLite 索引的更多信息,请参阅压缩 SQLite 的性能:索引?索引!。SQLite 索引设计的详细文档位于Query Planning中。
| 归档时间: |
|
| 查看次数: |
2894 次 |
| 最近记录: |