- 在SQLite中,联接是作为 嵌套循环联接实现的 ,即SQLite遍历一个表的所有(可能是过滤的)记录,并针对每个表在另一表中查找匹配的记录。选择两个连接表中的哪一个作为外部表还是内部表取决于估计的查找速度。
- 在查询中,SQLite每张表最多使用一个索引。
- 仅当使用了所有最左边的列时,才可以将多列索引用于其子集的查找。例如,您的
col1,col2
索引可用于同时使用col1
和的查找,也可用于col2
仅使用的查找col1
。
在您的第一个查询中,两列索引不能用于在上进行查找
col2。如果
id另一个表的列具有索引,SQLite只会将该表用作循环的内部表。如果
id也未建立索引,则SQLite可能会为此查询创建一个临时索引。
在第二个查询中,SQLite可能
t1用作外部表,因为
WHERe过滤器将减少必须在另一个表中查找的记录数。两列索引可用于首先搜索匹配
col1记录;然后将这些记录中的每一个都与连接在一起
t2。
要检查查询使用了哪些索引(如果有),请执行EXPLAIN QUERY PLAN。



