sqlite:在查询一对多数据库时避免全表扫描
假设数据库中有两个表:sqlite:在查询一对多数据库时避免全表扫描,sqlite,Sqlite,假设数据库中有两个表: user: --------------- | name | id | |-------|-----| | foo | 1 | | bar | 2 | --------------- comments: ------------------ | comment | id | |-----------------| | comment 1 | 1 | | comment 2 | 1 | | comment 3 | 1 | | com
user:
---------------
| name | id |
|-------|-----|
| foo | 1 |
| bar | 2 |
---------------
comments:
------------------
| comment | id |
|-----------------|
| comment 1 | 1 |
| comment 2 | 1 |
| comment 3 | 1 |
| comment 4 | 1 |
| comment 5 | 1 |
| comment 1 | 2 |
------------------
让我们说我想调出foo
的所有评论,这样我的查询就会
从注释c、用户u中选择c.comment,其中u.name='foo'和c.id=u.id
上面的查询是否会对comments表进行完整的表扫描,以获取用户
foo
的评论,或者是否有更好的查询来优化此操作并避免完整的表查找?我应该为这些表创建索引吗?您必须在表注释中添加注释/Id索引,以优化查询速度
但这取决于数据量或未来预期的数据量。有时,在一个永远不会增长的小表中,您永远不需要索引。
这取决于您对表的使用和演变的思考
因此,“我应该创造…”:这取决于!
尽量避免逗号分隔的连接!您认为SQLite为什么要进行完整的表查找?你检查执行计划了吗?尽管使用显式的
连接
操作符不会(或不应该)改变性能,但它的编码风格比在where
子句中使用过时的隐式连接要好。