优化SQLite中自连接的性能
我有一个表格,里面有21列(全是整数),分别是id、c1、c2……到c20。我想找出那些在各列上值相同的行的id。
比如说,如果第一行的c1等于第十行的c1,并且第一行的c2等于第十行的c2……这样就算这两行匹配。
这个查询的样子是这样的:
select r1.id, r2.id
from tbl r1, tbl r2
where 1=1 and r1.c1=r2.c1 and r1.c2=r2.c2 and
..... r1.c20=r2.c20 and not r1.id=r2.id
我现在使用的是自连接查询,但速度太慢了(处理10000行需要20秒)。我在这些列上设置了索引(?)。我大约有100万行数据。谢谢!
2 个回答
1
你可能想要创建一个额外的列,用来存储这一行所有值的哈希值。然后只需要对这个列进行索引,筛选出那些与您要查找的20个值的哈希值匹配的行。
1
你有没有试过在所有20个列上建立一个单一的索引呢?