SQlite提高了查询效率

时间:2017-01-30 15:23:20

标签: mysql sqlite

我有两个结构相同且每个大约10k行的表:

db1.people         db2.people
***************    ***************
name  |  number    name  |  number
---------------    ---------------
mike  |            bob   |  
john  |            Kev   |  45
mark  |            mark  |  16
***************    ***************

我的目标是在两个表中找到相同的人,并将数字值从db2复制到db1。它花了一些黑客,但我认为我有这个工作:

UPDATE people SET number = (SELECT number FROM db2.people WHERE number > 0 AND name = main.people.name);

这很有效,但非常重。我认为它做了以下事情:

  • 遍历db1.people.names中的所有10k名称
  • 在db2.people.names
  • 中找到相同的名称
  • 如果填充了db2.people.number,则将值放入main.people.number

db2中只有大约200个10k行,其中填充了一个数字。

这是我离开联盟的地方;我如何限制上述查询只打扰运行db2.people.number中具有相应数字值的名称?

那应该把我的10k ^ 10k带到200 ^ 10k

谢谢,

2 个答案:

答案 0 :(得分:1)

由于SQLite不支持更新连接语法,因此您可能会遇到涉及相关子查询的当前方法。话虽这么说,如果你在其两列的db2.people表中添加索引,它可能会显着加快更新速度。如果您在namenumber上添加索引,则可以在更新期间为db1.people中的每一行提供更快的查找时间。

答案 1 :(得分:1)

我读过SQLITE支持exists子句

UPDATE people 
SET number = 
(SELECT number FROM db2.people WHERE number > 0 AND name = main.people.name)
where exists 
(SELECT number FROM db2.people WHERE number > 0 AND name = main.people.name);