优化SQLite中自连接的性能

1 投票
2 回答
672 浏览
提问于 2025-04-16 01:36

我有一个表格,里面有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个列上建立一个单一的索引呢?

撰写回答